@ews-admin/global-design-system 1.1.23 → 1.1.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +8 -7
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/dist/utils/env-config.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/utils/env-config.ts +8 -7
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../src/utils/env-config.ts","../src/utils/index.ts","../src/components/Button/Button.tsx","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/arrow-right.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/eye-off.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/eye.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/heart.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/pencil.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/stethoscope.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/user.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.js","../src/icons/Icon.tsx","../src/icons/DoctorIcon.tsx","../src/icons/PatientIcon.tsx","../src/icons/UserIcon.tsx","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/hooks/useDebounce.ts","../node_modules/.pnpm/react-hook-form@7.66.0_react@18.3.1/node_modules/react-hook-form/dist/index.esm.mjs","../src/hooks/useSelectField.ts","../src/components/SearchAutocomplete/SearchAutocomplete.tsx","../src/components/MultiSearchAutocomplete/MultiSearchAutocomplete.tsx","../src/components/Modal/Modal.tsx","../src/components/ProfileImageUpload/ProfileImageUpload.tsx","../src/components/DropdownMultiSelect/DropdownMultiSelect.tsx","../src/components/Logo/Logo.tsx","../src/theme/themeConfig.ts","../src/theme/ThemeProvider.tsx","../src/components/ThemeToggle/ThemeToggle.tsx","../src/components/ThemeDebugger/ThemeDebugger.tsx","../src/molecules/SpecialtySearchAutocomplete/SpecialtySearchAutocomplete.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","export type Environment = \"local\" | \"dev\" | \"qa\" | \"prod\";\n\nexport interface EnvConfigOverrides {\n bffUrl?: string;\n loginBffUrl?: string;\n appUrl?: string;\n loginUrl?: string;\n dashboardUrl?: string;\n adminUrl?: string;\n}\n\nexport interface EnvConfig {\n env: Environment;\n bffUrl: string;\n loginBffUrl: string;\n appUrl: string;\n loginUrl: string;\n dashboardUrl: string;\n adminUrl: string;\n}\n\nconst LOCAL_PORTS = {\n bff: 8082,\n loginBff: 8080,\n app: 3000,\n login: 3001,\n dashboard: 3002,\n admin: 3008,\n} as const;\n\nfunction buildUrls(environment: Environment): Omit<EnvConfig, \"env\"> {\n if (environment === \"local\") {\n const base = \"http://local\";\n const domain = \"medecine360local.com\";\n return {\n bffUrl: `${base}.api.${domain}:${LOCAL_PORTS.bff}/bff/api/v1`,\n loginBffUrl: `${base}.api.${domain}:${LOCAL_PORTS.loginBff}/login-bff/api/v1`,\n appUrl: `${base}.app.${domain}:${LOCAL_PORTS.app}`,\n loginUrl: `${base}.login.${domain}:${LOCAL_PORTS.login}`,\n dashboardUrl: `${base}.dashboard.${domain}:${LOCAL_PORTS.dashboard}`,\n adminUrl: `${base}.admin.${domain}:${LOCAL_PORTS.admin}`,\n };\n }\n\n const prefix = environment === \"prod\" ? \"\" : `${environment}.`;\n const domain = \"medecine360.com\";\n\n return {\n bffUrl: `https://${prefix}api.${domain}/bff/api/v1`,\n loginBffUrl: `https://${prefix}api.${domain}/login-bff/api/v1`,\n appUrl: `https://${prefix}app.${domain}`,\n loginUrl: `https://${prefix}login.${domain}`,\n dashboardUrl: `https://${prefix}dashboard.${domain}`,\n adminUrl: `https://${prefix}admin.${domain}`,\n };\n}\n\n/**\n * Creates an environment configuration with all derived URLs.\n *\n * For deployed environments (dev, qa, prod), only the environment name is needed\n * — all URLs follow a predictable convention.\n *\n * For local development, sensible defaults are provided but can be overridden\n * (e.g. to point BFF URL at a mock server).\n *\n * @param env - The environment name (VITE_ENV value)\n * @param overrides - Optional URL overrides (e.g. for local mock servers)\n */\nexport function createEnvConfig(\n env: string,\n overrides?: EnvConfigOverrides\n): EnvConfig {\n const environment = (env || \"local\") as Environment;\n const derived = buildUrls(environment);\n\n return {\n env: environment,\n ...derived,\n ...overrides,\n };\n}\n","import { clsx, type ClassValue } from \"clsx\";\n\nexport { createEnvConfig } from \"./env-config\";\nexport type {\n EnvConfig,\n EnvConfigOverrides,\n Environment,\n} from \"./env-config\";\n\n/**\n * Default currency for price formatting\n */\nexport const CURRENCY = \"XOF\";\n\n/**\n * Utility function to merge class names\n * @param inputs - Class values to merge\n * @returns Merged class string\n */\nexport function cn(...inputs: ClassValue[]) {\n return clsx(inputs);\n}\n\n/**\n * Utility function to format currency\n * @param amount - Amount to format\n * @param currency - Currency code (default: CURRENCY constant)\n * @returns Formatted currency string\n */\nexport function formatCurrency(amount: number, currency = CURRENCY): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency,\n }).format(amount);\n}\n\n/**\n * Utility function to format date\n * @param date - Date to format\n * @param options - Intl.DateTimeFormat options\n * @returns Formatted date string\n */\nexport function formatDate(\n date: Date | string | number,\n options?: Intl.DateTimeFormatOptions\n): string {\n const dateObj = new Date(date);\n return new Intl.DateTimeFormat(\"en-US\", {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n ...options,\n }).format(dateObj);\n}\n\n/**\n * Utility function to debounce function calls\n * @param func - Function to debounce\n * @param wait - Wait time in milliseconds\n * @returns Debounced function\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n}\n\n/**\n * Utility function to generate unique ID\n * @param prefix - Optional prefix for the ID\n * @returns Unique ID string\n */\nexport function generateId(prefix = \"ews\"): string {\n return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Utility function to format numeric input by removing non-digit characters\n * @param value - String value to format\n * @returns String with only numeric characters\n */\nexport const formatNumeric = (value: string): string => {\n return value.replace(/\\D/g, \"\");\n};\n\n/**\n * Utility function to validate phone numbers\n * Validates phone numbers with 1-17 digits, optionally starting with + symbol\n * @param value - Phone number string to validate\n * @returns Boolean indicating if the phone number is valid\n */\nexport function isValidPhoneNumber(value: string): boolean {\n const trimmedValue = value.trim();\n // Allow + at the beginning, followed by 1-17 digits\n // Or just 1-17 digits without +\n const phoneRegex = /^(\\+\\d{1,17}|\\d{1,17})$/;\n return phoneRegex.test(trimmedValue);\n}\n\n/**\n * Blood type enum matching backend BloodTypeEnum values\n */\nexport enum BloodType {\n A_POSITIVE = \"A+\",\n A_NEGATIVE = \"A-\",\n B_POSITIVE = \"B+\",\n B_NEGATIVE = \"B-\",\n AB_POSITIVE = \"AB+\",\n AB_NEGATIVE = \"AB-\",\n O_POSITIVE = \"O+\",\n O_NEGATIVE = \"O-\",\n UNKNOWN = \"UNKNOWN\",\n}\n\n/**\n * Ordered list of all blood type values.\n * Use this to build select/dropdown options.\n */\nexport const BLOOD_TYPES: BloodType[] = [\n BloodType.A_POSITIVE,\n BloodType.A_NEGATIVE,\n BloodType.B_POSITIVE,\n BloodType.B_NEGATIVE,\n BloodType.AB_POSITIVE,\n BloodType.AB_NEGATIVE,\n BloodType.O_POSITIVE,\n BloodType.O_NEGATIVE,\n BloodType.UNKNOWN,\n];\n","import React from \"react\";\nimport { cn } from \"../../utils\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Button variant\n */\n variant?:\n | \"ews-primary\"\n | \"ews-secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"outline\"\n | \"ghost\";\n /**\n * Button size\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Whether the button is in a loading state\n */\n loading?: boolean;\n /**\n * Whether the button should take full width\n */\n fullWidth?: boolean;\n /**\n * Icon to display before the button text\n */\n leftIcon?: React.ReactNode;\n /**\n * Icon to display after the button text\n */\n rightIcon?: React.ReactNode;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"ews-primary\",\n size = \"md\",\n loading = false,\n fullWidth = false,\n leftIcon,\n rightIcon,\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n const baseStyles =\n \"inline-flex items-center justify-center font-medium rounded-md transition-colors focus:outline-none disabled:opacity-50 disabled:pointer-events-none\";\n\n const variants = {\n \"ews-primary\": \"bg-ews-primary text-white hover:bg-ews-primary-hover\",\n \"ews-secondary\":\n \"bg-ews-secondary text-white hover:bg-ews-secondary-hover\",\n success: \"bg-ews-success text-white hover:bg-ews-success-hover\",\n warning: \"bg-ews-warning text-white hover:bg-ews-warning-hover\",\n error: \"bg-ews-error text-white hover:bg-ews-error-hover\",\n outline:\n \"bg-transparent text-sm font-medium text-ews-primary hover:text-ews-primary/80\",\n ghost:\n \"border border-ews-primary text-ews-primary hover:bg-ews-primary hover:text-white disabled:border-gray-400 disabled:text-gray-400 focus:ring-2 focus:ring-offset-2 focus:ring-ews-primary\",\n };\n\n const sizes = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n };\n\n const iconSizes = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n };\n\n return (\n <button\n className={cn(\n baseStyles,\n variants[variant],\n sizes[size],\n fullWidth && \"w-full\",\n className\n )}\n ref={ref}\n disabled={disabled || loading}\n {...props}\n >\n {loading && (\n <svg\n className=\"mr-2 -ml-1 w-4 h-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {!loading && leftIcon && (\n <span className={cn(\"flex items-center mr-2\", iconSizes[size])}>\n {leftIcon}\n </span>\n )}\n {children}\n {!loading && rightIcon && (\n <span className={cn(\"flex items-center ml-2\", iconSizes[size])}>\n {rightIcon}\n </span>\n )}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button };\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst CircleCheckBig = createLucideIcon(\"circle-check-big\", __iconNode);\n\nexport { __iconNode, CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\",\n key: \"mvr1a0\"\n }\n ]\n];\nconst Heart = createLucideIcon(\"heart\", __iconNode);\n\nexport { __iconNode, Heart as default };\n//# sourceMappingURL=heart.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ],\n [\"path\", { d: \"m15 5 4 4\", key: \"1mk7zo\" }]\n];\nconst Pencil = createLucideIcon(\"pencil\", __iconNode);\n\nexport { __iconNode, Pencil as default };\n//# sourceMappingURL=pencil.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M11 2v2\", key: \"1539x4\" }],\n [\"path\", { d: \"M5 2v2\", key: \"1yf1q8\" }],\n [\"path\", { d: \"M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1\", key: \"rb5t3r\" }],\n [\"path\", { d: \"M8 15a6 6 0 0 0 12 0v-3\", key: \"x18d4x\" }],\n [\"circle\", { cx: \"20\", cy: \"10\", r: \"2\", key: \"ts1r5v\" }]\n];\nconst Stethoscope = createLucideIcon(\"stethoscope\", __iconNode);\n\nexport { __iconNode, Stethoscope as default };\n//# sourceMappingURL=stethoscope.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash = createLucideIcon(\"trash\", __iconNode);\n\nexport { __iconNode, Trash as default };\n//# sourceMappingURL=trash.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n];\nconst User = createLucideIcon(\"user\", __iconNode);\n\nexport { __iconNode, User as default };\n//# sourceMappingURL=user.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import { LucideProps } from \"lucide-react\";\nimport React from \"react\";\n\nexport interface IconProps extends Omit<LucideProps, \"size\"> {\n /**\n * Icon size\n */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | number;\n /**\n * The Lucide icon component to render\n */\n icon: React.ComponentType<LucideProps>;\n}\n\n// Simple icon props for individual icon components\nexport interface SimpleIconProps {\n /**\n * Icon size in pixels\n */\n size?: number;\n /**\n * Icon color (can be hex, rgb, or Tailwind class)\n */\n color?: string;\n /**\n * Additional CSS classes (supports Tailwind classes)\n */\n className?: string;\n /**\n * Other props passed to the underlying icon\n */\n [key: string]: unknown;\n}\n\nconst Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ size = \"md\", icon: IconComponent, className, ...props }, ref) => {\n const sizes = {\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n };\n\n const iconSize = typeof size === \"number\" ? size : sizes[size];\n\n return (\n <IconComponent\n ref={ref}\n size={iconSize}\n className={className}\n {...props}\n />\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n\nexport { Icon };\n","import { Stethoscope } from \"lucide-react\";\nimport React from \"react\";\nimport { SimpleIconProps } from \"./Icon\";\n\nexport const DoctorIcon: React.FC<SimpleIconProps> = ({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}) => {\n return (\n <Stethoscope size={size} color={color} className={className} {...props} />\n );\n};\n","import { Heart } from \"lucide-react\";\nimport React from \"react\";\nimport { SimpleIconProps } from \"./Icon\";\n\nexport const PatientIcon: React.FC<SimpleIconProps> = ({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}) => {\n return <Heart size={size} color={color} className={className} {...props} />;\n};\n","import { User } from \"lucide-react\";\nimport React from \"react\";\nimport { SimpleIconProps } from \"./Icon\";\n\nexport const UserIcon: React.FC<SimpleIconProps> = ({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}) => {\n return <User size={size} color={color} className={className} {...props} />;\n};\n","import { ChevronDown } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { Eye, EyeOff } from \"../../icons\";\nimport { cn } from \"../../utils\";\n\nexport interface CountryCodeOption {\n code: string;\n country: string;\n}\n\nexport interface CountryCodeSelectProps {\n /**\n * Array of country code options\n */\n options: CountryCodeOption[];\n /**\n * Currently selected country code\n */\n value: string;\n /**\n * Handler for when country code changes\n */\n onChange: (code: string) => void;\n}\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n /**\n * Input variant\n */\n variant?: \"default\" | \"error\" | \"success\";\n /**\n * Input size\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Label for the input\n */\n label?: string;\n /**\n * Helper text to display below the input\n */\n helperText?: string;\n /**\n * Error message to display\n */\n error?: string;\n /**\n * Icon to display before the input\n */\n leftIcon?: React.ReactNode;\n /**\n * Icon to display after the input\n */\n rightIcon?: React.ReactNode;\n /**\n * Text or node to display as a left addon (e.g., currency \"FCFA\")\n */\n leftAddon?: React.ReactNode;\n /**\n * Text or node to display as a right addon inside the input (e.g., currency \"FCFA\")\n */\n rightAddon?: React.ReactNode;\n /**\n * Whether the input should take full width\n */\n fullWidth?: boolean;\n /**\n * Whether to show password toggle for password inputs\n */\n showPasswordToggle?: boolean;\n /**\n * Whether the input is required (shows red asterisk)\n */\n required?: boolean;\n /**\n * Country code dropdown configuration for phone inputs\n */\n countryCodeSelect?: CountryCodeSelectProps;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n variant = \"default\",\n size = \"md\",\n label,\n helperText,\n error,\n leftIcon,\n rightIcon,\n fullWidth = false,\n showPasswordToggle = false,\n required = false,\n countryCodeSelect,\n leftAddon,\n rightAddon,\n id,\n type = \"text\",\n ...props\n },\n ref\n ) => {\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\n const hasError = Boolean(error);\n const actualVariant = hasError ? \"error\" : variant;\n\n // Password visibility state\n const [showPassword, setShowPassword] = useState(false);\n const isPasswordInput = type === \"password\";\n const shouldShowPasswordToggle = showPasswordToggle && isPasswordInput;\n const actualType = isPasswordInput && showPassword ? \"text\" : type;\n\n // Country code dropdown state\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const baseStyles =\n \"block w-full rounded-md border transition-colors focus:outline-none focus:ring-2 focus:ring-offset-0 hover:border-ews-primary\";\n\n const variants = {\n default:\n \"border-ews-gray-300 focus:border-ews-primary focus:ring-ews-primary\",\n error: \"border-ews-error focus:border-ews-error focus:ring-ews-error\",\n success:\n \"border-ews-success focus:border-ews-success focus:ring-ews-success\",\n };\n\n const sizes = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-3 py-2 text-base\",\n lg: \"px-4 py-3 text-lg\",\n };\n\n const iconSizes = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n };\n\n const isCheckbox = type === \"checkbox\";\n\n // For checkboxes, render with or without label based on label prop\n if (isCheckbox) {\n if (label) {\n // Render checkbox with built-in label\n return (\n <div className={cn(\"space-y-1\", fullWidth ? \"w-full\" : \"w-auto\")}>\n <div className=\"flex items-start space-x-3\">\n <input\n id={inputId}\n type={actualType}\n className={cn(\n \"mt-0.5\", // Slight top margin to align with first line of text\n className\n )}\n ref={ref}\n {...props}\n />\n <div className=\"flex-1\">\n <label\n htmlFor={inputId}\n className=\"block text-sm font-medium cursor-pointer text-ews-gray-700\"\n >\n {label}\n {required && <span className=\"ml-1 text-ews-error\">*</span>}\n </label>\n {(error || helperText) && (\n <p\n className={cn(\n \"mt-1 text-sm\",\n error ? \"text-ews-error\" : \"text-ews-gray-500\"\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n </div>\n </div>\n );\n } else {\n // Render just the checkbox for external label usage\n return (\n <input\n id={inputId}\n type={actualType}\n className={cn(className)}\n ref={ref}\n {...props}\n />\n );\n }\n }\n\n // Default rendering for non-checkbox inputs\n return (\n <div className={cn(\"space-y-1\", fullWidth ? \"w-full\" : \"w-auto\")}>\n {label && (\n <label\n htmlFor={inputId}\n className=\"block text-sm font-medium text-ews-gray-700\"\n >\n {label}\n {required && <span className=\"ml-1 text-ews-error\">*</span>}\n </label>\n )}\n <div className=\"relative\">\n {countryCodeSelect && (\n <div className=\"absolute inset-y-0 left-0 flex items-center pl-1 z-10\" ref={dropdownRef}>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsDropdownOpen(!isDropdownOpen)}\n className={cn(\n \"flex items-center gap-1 px-2 py-1 rounded text-ews-gray-700\",\n \"hover:bg-ews-gray-50 transition-colors cursor-pointer\",\n \"focus:outline-none focus:ring-2 focus:ring-ews-primary focus:ring-offset-0\",\n \"border-0 bg-transparent text-base\"\n )}\n >\n <span className=\"font-medium\">{countryCodeSelect.value}</span>\n <ChevronDown\n className={cn(\n \"w-4 h-4 text-ews-gray-400 transition-transform\",\n isDropdownOpen && \"rotate-180\"\n )}\n />\n </button>\n\n {isDropdownOpen && (\n <div\n className={cn(\n \"absolute top-full left-0 mt-1 bg-white rounded-md border shadow-lg\",\n \"border-ews-gray-300 min-w-[120px] z-50\"\n )}\n style={{ maxHeight: \"200px\", overflowY: \"auto\" }}\n >\n {countryCodeSelect.options.map((item) => {\n const isSelected = item.code === countryCodeSelect.value;\n return (\n <div\n key={item.code}\n onClick={() => {\n countryCodeSelect.onChange(item.code);\n setIsDropdownOpen(false);\n }}\n className={cn(\n \"px-3 py-2 text-sm cursor-pointer transition-colors\",\n isSelected && \"bg-ews-primary text-white\",\n !isSelected && \"hover:bg-ews-gray-50\"\n )}\n >\n <span className=\"font-medium\">{item.code}</span>\n {item.country && (\n <span className={cn(\n \"ml-2 text-xs\",\n isSelected ? \"text-white/80\" : \"text-ews-gray-500\"\n )}>\n {item.country}\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n )}\n {leftIcon && !countryCodeSelect && !leftAddon && (\n <div className=\"flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none\">\n <span className={cn(\"text-ews-gray-400\", iconSizes[size])}>\n {leftIcon}\n </span>\n </div>\n )}\n {leftAddon && !countryCodeSelect && !leftIcon && (\n <div className=\"flex absolute inset-y-0 left-0 items-center pointer-events-none overflow-hidden rounded-l-md\">\n <span className=\"flex items-center h-full px-3 text-sm font-medium whitespace-nowrap bg-ews-gray-50 border-r border-ews-gray-300 text-ews-gray-600\">\n {leftAddon}\n </span>\n </div>\n )}\n <input\n id={inputId}\n type={actualType}\n className={cn(\n baseStyles,\n variants[actualVariant],\n sizes[size],\n countryCodeSelect && \"pl-24\",\n leftIcon && !countryCodeSelect && !leftAddon && \"pl-10\",\n leftAddon && !countryCodeSelect && !leftIcon && \"pl-16\",\n (rightIcon || shouldShowPasswordToggle) && \"pr-10\",\n rightAddon && !rightIcon && !shouldShowPasswordToggle && \"pr-16\",\n className\n )}\n ref={ref}\n {...props}\n />\n {rightAddon && !rightIcon && !shouldShowPasswordToggle && (\n <div className=\"flex absolute inset-y-0 right-0 items-center pr-3 pointer-events-none\">\n <span className=\"text-sm font-medium text-ews-gray-500\">\n {rightAddon}\n </span>\n </div>\n )}\n {rightIcon && !shouldShowPasswordToggle && (\n <div className=\"flex absolute inset-y-0 right-0 items-center pr-3 pointer-events-none\">\n <span className={cn(\"text-ews-gray-400\", iconSizes[size])}>\n {rightIcon}\n </span>\n </div>\n )}\n {shouldShowPasswordToggle && (\n <button\n type=\"button\"\n className=\"flex absolute inset-y-0 right-0 items-center pr-3\"\n onClick={() => setShowPassword(!showPassword)}\n tabIndex={-1}\n >\n <span\n className={cn(\n \"transition-colors text-ews-gray-400 hover:text-ews-gray-600\",\n iconSizes[size]\n )}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </span>\n </button>\n )}\n </div>\n {(error || helperText) && (\n <p\n className={cn(\n \"text-sm\",\n error ? \"text-ews-error\" : \"text-ews-gray-500\"\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n\n","import { ChevronDown, Search, X } from \"lucide-react\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils\";\nimport { Input } from \"../Input\";\n\nexport interface SelectOption<T = unknown> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps<T = unknown> {\n /**\n * Array of options to display\n */\n options: SelectOption<T>[];\n /**\n * Current selected value\n */\n value?: T;\n /**\n * Callback when selection changes\n */\n onChange?: (value: T, option: SelectOption<T>) => void;\n /**\n * Placeholder text when no option is selected\n */\n placeholder?: string;\n /**\n * Label for the select\n */\n label?: string;\n /**\n * Helper text to display below the select\n */\n helperText?: string;\n /**\n * Error message to display\n */\n error?: string;\n /**\n * Whether the select is in an error state\n */\n isError?: boolean;\n /**\n * Size variant\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Whether the select is disabled\n */\n disabled?: boolean;\n /**\n * Whether the select is required\n */\n required?: boolean;\n /**\n * Whether the select is searchable\n */\n searchable?: boolean;\n /**\n * Whether the select allows multiple selections\n */\n multiple?: boolean;\n /**\n * Custom class name for the select element\n */\n selectClassName?: string;\n /**\n * Custom class name for the container\n */\n containerClassName?: string;\n /**\n * Custom class name for the dropdown\n */\n dropdownClassName?: string;\n /**\n * Maximum height of the dropdown\n */\n maxHeight?: number;\n /**\n * Whether to show clear button\n */\n clearable?: boolean;\n /**\n * Custom render function for options\n */\n renderOption?: (\n option: SelectOption<T>,\n isSelected: boolean\n ) => React.ReactNode;\n /**\n * Custom render function for selected value\n */\n renderValue?: (option: SelectOption<T> | null) => React.ReactNode;\n}\n\nconst Select = forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options = [],\n value,\n onChange,\n placeholder = \"Select an option...\",\n label,\n helperText,\n error,\n isError = false,\n size = \"md\",\n disabled = false,\n required = false,\n searchable = false,\n multiple: _multiple = false,\n selectClassName,\n containerClassName,\n dropdownClassName,\n maxHeight = 200,\n clearable = false,\n renderOption,\n renderValue,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const selectId = `select-${generatedId}`;\n const hasError = isError || !!error;\n\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const [dropdownPosition, setDropdownPosition] = useState<\"bottom\" | \"top\">(\n \"bottom\"\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n // Find selected option\n const selectedOption = options.find((option) => option.value === value);\n\n // Filter options based on search term\n const filteredOptions = searchable\n ? options.filter((option) =>\n option.label.toLowerCase().includes(searchTerm.toLowerCase())\n )\n : options;\n\n // Calculate dropdown position based on available space\n const calculateDropdownPosition = useCallback(() => {\n if (!containerRef.current) return;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n // More accurate height calculation\n const optionHeight = 40; // Approximate height per option\n const searchHeight = searchable ? 60 : 0;\n const padding = 16; // py-1 = 8px top + 8px bottom\n const dropdownHeight = Math.min(\n maxHeight,\n filteredOptions.length * optionHeight + searchHeight + padding\n );\n\n const spaceBelow = viewportHeight - containerRect.bottom;\n const spaceAbove = containerRect.top;\n\n // Add some buffer (20px) to prevent edge cases\n const buffer = 20;\n\n console.log(\"Position calculation:\", {\n spaceBelow,\n spaceAbove,\n dropdownHeight,\n viewportHeight,\n containerBottom: containerRect.bottom,\n shouldOpenTop:\n spaceBelow < dropdownHeight + buffer &&\n spaceAbove > dropdownHeight + buffer,\n });\n\n // If there's not enough space below but enough space above, position on top\n if (\n spaceBelow < dropdownHeight + buffer &&\n spaceAbove > dropdownHeight + buffer\n ) {\n setDropdownPosition(\"top\");\n } else {\n setDropdownPosition(\"bottom\");\n }\n }, [filteredOptions.length, searchable, maxHeight]);\n\n // Alternative calculation using actual dropdown element when available\n const calculateDropdownPositionWithElement = () => {\n if (!containerRef.current || !dropdownRef.current) return;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n const dropdownRect = dropdownRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n const spaceBelow = viewportHeight - containerRect.bottom;\n const spaceAbove = containerRect.top;\n const actualDropdownHeight = dropdownRect.height;\n\n console.log(\"Position calculation with element:\", {\n spaceBelow,\n spaceAbove,\n actualDropdownHeight,\n viewportHeight,\n containerBottom: containerRect.bottom,\n });\n\n // If there's not enough space below but enough space above, position on top\n if (\n spaceBelow < actualDropdownHeight &&\n spaceAbove > actualDropdownHeight\n ) {\n setDropdownPosition(\"top\");\n } else {\n setDropdownPosition(\"bottom\");\n }\n };\n\n // Handle click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchTerm(\"\");\n setFocusedIndex(-1);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Calculate position when dropdown opens\n useEffect(() => {\n if (isOpen) {\n // First calculation based on estimated height\n calculateDropdownPosition();\n\n // Second calculation after dropdown is rendered with actual height\n requestAnimationFrame(() => {\n calculateDropdownPositionWithElement();\n });\n }\n }, [\n isOpen,\n filteredOptions.length,\n searchable,\n maxHeight,\n calculateDropdownPosition,\n ]);\n\n // Recalculate position on window resize\n useEffect(() => {\n const handleResize = () => {\n if (isOpen) {\n calculateDropdownPosition();\n }\n };\n\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n window.removeEventListener(\"scroll\", handleResize);\n };\n }, [isOpen, calculateDropdownPosition]);\n\n // Handle keyboard navigation\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setFocusedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case \"ArrowUp\":\n event.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setFocusedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1\n );\n }\n break;\n case \"Enter\":\n event.preventDefault();\n if (\n isOpen &&\n focusedIndex >= 0 &&\n focusedIndex < filteredOptions.length\n ) {\n handleSelect(filteredOptions[focusedIndex]);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case \"Escape\":\n event.preventDefault();\n setIsOpen(false);\n setSearchTerm(\"\");\n setFocusedIndex(-1);\n break;\n case \"Tab\":\n setIsOpen(false);\n setSearchTerm(\"\");\n setFocusedIndex(-1);\n break;\n }\n };\n\n // Handle option selection\n const handleSelect = (option: SelectOption) => {\n if (option.disabled) return;\n\n onChange?.(option.value, option);\n setIsOpen(false);\n setSearchTerm(\"\");\n setFocusedIndex(-1);\n };\n\n // Handle clear\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation();\n onChange?.(undefined as unknown, {} as SelectOption);\n };\n\n // Handle toggle\n const handleToggle = () => {\n if (disabled) return;\n setIsOpen(!isOpen);\n if (!isOpen && searchable) {\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n };\n\n // Scroll focused option into view\n useEffect(() => {\n if (focusedIndex >= 0 && optionRefs.current[focusedIndex]) {\n optionRefs.current[focusedIndex]?.scrollIntoView({\n block: \"nearest\",\n });\n }\n }, [focusedIndex]);\n\n const sizeClasses = {\n sm: \"text-sm px-3 py-1.5\",\n md: \"text-sm px-3 py-2\",\n lg: \"text-base px-4 py-2.5\",\n };\n\n const iconSizeClasses = {\n sm: \"w-4 h-4\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n };\n\n return (\n <div className={cn(\"w-full\", containerClassName)} ref={containerRef}>\n {label && (\n <label\n htmlFor={selectId}\n className={cn(\n \"block text-sm font-medium mb-1\",\n \"text-ews-gray-700\",\n disabled && \"text-ews-gray-400\"\n )}\n >\n {label}\n {required && <span className=\"ml-1 text-ews-error\">*</span>}\n </label>\n )}\n\n <div className=\"relative\">\n {/* Custom select trigger */}\n <div\n ref={ref as React.RefObject<HTMLDivElement>}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-labelledby={label ? selectId : undefined}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n onClick={handleToggle}\n className={cn(\n // Base styles\n \"ews-select-trigger w-full bg-white border rounded-md shadow-sm transition-colors cursor-pointer\",\n \"focus:outline-none focus:ring-2 focus:ring-offset-0\",\n \"disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-ews-gray-50\",\n\n // Size\n sizeClasses[size],\n\n // Border and focus states\n hasError\n ? \"border-ews-error focus:border-ews-error focus:ring-ews-error/20\"\n : \"border-ews-gray-300 focus:border-ews-primary focus:ring-ews-primary/20\",\n\n // Hover state\n !disabled && !hasError && \"hover:border-ews-gray-400\",\n\n // Text color\n \"text-ews-gray-900\",\n\n // Padding for icons\n \"pr-10\",\n\n selectClassName\n )}\n {...props}\n >\n <div className=\"flex justify-between items-center\">\n <div className=\"flex-1 min-w-0\">\n {selectedOption ? (\n renderValue ? (\n renderValue(selectedOption)\n ) : (\n <span className=\"truncate\">{selectedOption.label}</span>\n )\n ) : (\n <span className=\"text-ews-gray-500\">{placeholder}</span>\n )}\n </div>\n\n <div className=\"flex items-center ml-2 space-x-1\">\n {clearable && selectedOption && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"p-1 rounded hover:bg-ews-gray-100\"\n >\n <X\n className={cn(iconSizeClasses[size], \"text-ews-gray-400\")}\n />\n </button>\n )}\n <ChevronDown\n className={cn(\n iconSizeClasses[size],\n hasError ? \"text-ews-error\" : \"text-ews-gray-400\",\n disabled && \"text-ews-gray-300\",\n isOpen && \"rotate-180 transition-transform\"\n )}\n />\n </div>\n </div>\n </div>\n\n {/* Custom dropdown */}\n {isOpen && (\n <div\n ref={dropdownRef}\n role=\"listbox\"\n className={cn(\n \"absolute z-50 w-full bg-white rounded-md border shadow-lg border-ews-gray-300\",\n \"focus:outline-none\",\n dropdownPosition === \"top\"\n ? \"bottom-full mb-1\"\n : \"top-full mt-1\",\n dropdownClassName\n )}\n style={{ maxHeight: `${maxHeight}px` }}\n >\n {/* Search input */}\n {searchable && (\n <div className=\"p-2 border-b border-ews-gray-200\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 w-4 h-4 transform -translate-y-1/2 text-ews-gray-400\" />\n <Input\n ref={inputRef}\n type=\"text\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n placeholder=\"Search options...\"\n leftIcon={\n <Search className=\"w-4 h-4 text-ews-gray-400\" />\n }\n />\n </div>\n </div>\n )}\n\n {/* Options list */}\n <div\n className=\"overflow-auto py-1\"\n style={{ maxHeight: `${maxHeight - (searchable ? 60 : 0)}px` }}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-ews-gray-500\">\n {searchTerm ? \"No options found\" : \"No options available\"}\n </div>\n ) : (\n filteredOptions.map((option, index) => {\n const isSelected = option.value === value;\n const isFocused = index === focusedIndex;\n\n return (\n <div\n key={`${String(option.value)}-${index}`}\n ref={(el) => (optionRefs.current[index] = el)}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => handleSelect(option)}\n className={cn(\n \"px-3 py-2 text-sm cursor-pointer transition-colors\",\n isSelected && \"bg-ews-primary text-white\",\n !isSelected && isFocused && \"bg-ews-gray-100\",\n !isSelected && !isFocused && \"hover:bg-ews-gray-50\",\n option.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n {renderOption ? (\n renderOption(option, isSelected)\n ) : (\n <span className=\"truncate\">{option.label}</span>\n )}\n </div>\n );\n })\n )}\n </div>\n </div>\n )}\n </div>\n\n {/* Helper text or error message */}\n {(helperText || error) && (\n <div className=\"mt-1\">\n {error ? (\n <p className=\"text-sm text-ews-error\">{error}</p>\n ) : (\n <p className=\"text-sm text-ews-gray-500\">{helperText}</p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select };\n","import { useEffect, useState } from \"react\";\n\nconst DEFAULT_DELAY = 500;\n\n/**\n * A custom hook that debounces a value\n * @param value - The value to debounce\n * @param delay - The delay in milliseconds (optional, defaults to 300ms)\n * @returns The debounced value\n */\nexport function useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n const actualDelay = delay ?? DEFAULT_DELAY;\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, actualDelay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, actualDelay]);\n\n return debouncedValue;\n}\n\n/**\n * A custom hook that provides a debounced callback function\n * @param callback - The function to debounce\n * @param delay - The delay in milliseconds (optional, defaults to 300ms)\n * @returns A debounced version of the callback\n */\nexport function useDebouncedCallback<T extends (...args: unknown[]) => unknown>(\n callback: T,\n delay?: number\n): T {\n const [debounceTimer, setDebounceTimer] = useState<ReturnType<\n typeof setTimeout\n > | null>(null);\n\n const debouncedCallback = ((...args: Parameters<T>) => {\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n\n const actualDelay = delay ?? DEFAULT_DELAY;\n const newTimer = setTimeout(() => {\n callback(...args);\n }, actualDelay);\n\n setDebounceTimer(newTimer);\n }) as T;\n\n useEffect(() => {\n return () => {\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n };\n }, [debounceTimer]);\n\n return debouncedCallback;\n}\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n ? isCheckBoxInput(event.target)\n ? event.target.checked\n : event.target.value\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar isPlainObject = (tempObject) => {\n const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n let copy;\n const isArray = Array.isArray(data);\n const isFileListInstance = typeof FileList !== 'undefined' ? data instanceof FileList : false;\n if (data instanceof Date) {\n copy = new Date(data);\n }\n else if (!(isWeb && (data instanceof Blob || isFileListInstance)) &&\n (isArray || isObject(data))) {\n copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));\n if (!isArray && !isPlainObject(data)) {\n copy = data;\n }\n else {\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n }\n }\n else {\n return data;\n }\n return copy;\n}\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar isUndefined = (val) => val === undefined;\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar get = (object, path, defaultValue) => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);\n return isUndefined(result) || result === object\n ? isUndefined(object[path])\n ? defaultValue\n : object[path]\n : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar set = (object, path, value) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n object[key] = newValue;\n object = object[key];\n }\n};\n\nconst EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n};\nconst VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n\nconst HookFormContext = React.createContext(null);\nHookFormContext.displayName = 'HookFormContext';\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n const { children, ...data } = props;\n return (React.createElement(HookFormContext.Provider, { value: data }, children));\n};\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n const result = {\n defaultValues: control._defaultValues,\n };\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key;\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n return result;\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFormState(props) {\n const methods = useFormContext();\n const { control = methods.control, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n useIsomorphicLayoutEffect(() => control._subscribe({\n name,\n formState: _localProxyFormState.current,\n exact,\n callback: (formState) => {\n !disabled &&\n updateFormState({\n ...control._formState,\n ...formState,\n });\n },\n }), [name, disabled, exact]);\n React.useEffect(() => {\n _localProxyFormState.current.isValid && control._setValid(true);\n }, [control]);\n return React.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n if (Array.isArray(names)) {\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\n get(formValues, fieldName)));\n }\n isGlobal && (_names.watchAll = true);\n return formValues;\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2, _internal_visited = new WeakSet()) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return object1 === object2;\n }\n if (isDateObject(object1) && isDateObject(object2)) {\n return object1.getTime() === object2.getTime();\n }\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n if (_internal_visited.has(object1) || _internal_visited.has(object2)) {\n return true;\n }\n _internal_visited.add(object1);\n _internal_visited.add(object2);\n for (const key of keys1) {\n const val1 = object1[key];\n if (!keys2.includes(key)) {\n return false;\n }\n if (key !== 'ref') {\n const val2 = object2[key];\n if ((isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2, _internal_visited)\n : val1 !== val2) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nfunction useWatch(props) {\n const methods = useFormContext();\n const { control = methods.control, name, defaultValue, disabled, exact, compute, } = props || {};\n const _defaultValue = React.useRef(defaultValue);\n const _compute = React.useRef(compute);\n const _computeFormValues = React.useRef(undefined);\n const _prevControl = React.useRef(control);\n const _prevName = React.useRef(name);\n _compute.current = compute;\n const [value, updateValue] = React.useState(() => {\n const defaultValue = control._getWatch(name, _defaultValue.current);\n return _compute.current ? _compute.current(defaultValue) : defaultValue;\n });\n const getCurrentOutput = React.useCallback((values) => {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n return _compute.current ? _compute.current(formValues) : formValues;\n }, [control._formValues, control._names, name]);\n const refreshValue = React.useCallback((values) => {\n if (!disabled) {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n if (_compute.current) {\n const computedFormValues = _compute.current(formValues);\n if (!deepEqual(computedFormValues, _computeFormValues.current)) {\n updateValue(computedFormValues);\n _computeFormValues.current = computedFormValues;\n }\n }\n else {\n updateValue(formValues);\n }\n }\n }, [control._formValues, control._names, disabled, name]);\n useIsomorphicLayoutEffect(() => {\n if (_prevControl.current !== control ||\n !deepEqual(_prevName.current, name)) {\n _prevControl.current = control;\n _prevName.current = name;\n refreshValue();\n }\n return control._subscribe({\n name,\n formState: {\n values: true,\n },\n exact,\n callback: (formState) => {\n refreshValue(formState.values);\n },\n });\n }, [control, exact, name, refreshValue]);\n React.useEffect(() => control._removeUnmounted());\n // If name or control changed for this render, synchronously reflect the\n // latest value so callers (like useController) see the correct value\n // immediately on the same render.\n // Optimize: Check control reference first before expensive deepEqual\n const controlChanged = _prevControl.current !== control;\n const prevName = _prevName.current;\n // Cache the computed output to avoid duplicate calls within the same render\n // We include shouldReturnImmediate in deps to ensure proper recomputation\n const computedOutput = React.useMemo(() => {\n if (disabled) {\n return null;\n }\n const nameChanged = !controlChanged && !deepEqual(prevName, name);\n const shouldReturnImmediate = controlChanged || nameChanged;\n return shouldReturnImmediate ? getCurrentOutput() : null;\n }, [disabled, controlChanged, name, prevName, getCurrentOutput]);\n return computedOutput !== null ? computedOutput : value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n * <div>\n * <input {...field} placeholder={props.name} />\n * <p>{fieldState.isTouched && \"Touched\"}</p>\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * </div>\n * );\n * }\n * ```\n */\nfunction useController(props) {\n const methods = useFormContext();\n const { name, disabled, control = methods.control, shouldUnregister, defaultValue, } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const defaultValueMemo = React.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);\n const value = useWatch({\n control,\n name,\n defaultValue: defaultValueMemo,\n exact: true,\n });\n const formState = useFormState({\n control,\n name,\n exact: true,\n });\n const _props = React.useRef(props);\n const _previousNameRef = React.useRef(undefined);\n const _registerProps = React.useRef(control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }));\n _props.current = props;\n const fieldState = React.useMemo(() => Object.defineProperties({}, {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n }), [formState, name]);\n const onChange = React.useCallback((event) => _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name,\n },\n type: EVENTS.CHANGE,\n }), [name]);\n const onBlur = React.useCallback(() => _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name,\n },\n type: EVENTS.BLUR,\n }), [name, control._formValues]);\n const ref = React.useCallback((elm) => {\n const field = get(control._fields, name);\n if (field && elm) {\n field._f.ref = {\n focus: () => elm.focus && elm.focus(),\n select: () => elm.select && elm.select(),\n setCustomValidity: (message) => elm.setCustomValidity(message),\n reportValidity: () => elm.reportValidity(),\n };\n }\n }, [control._fields, name]);\n const field = React.useMemo(() => ({\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange,\n onBlur,\n ref,\n }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);\n React.useEffect(() => {\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n const previousName = _previousNameRef.current;\n if (previousName && previousName !== name && !isArrayField) {\n control.unregister(previousName);\n }\n control.register(name, {\n ..._props.current.rules,\n ...(isBoolean(_props.current.disabled)\n ? { disabled: _props.current.disabled }\n : {}),\n });\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n updateMounted(name, true);\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name, _props.current.defaultValue));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n !isArrayField && control.register(name);\n _previousNameRef.current = name;\n return () => {\n (isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField)\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n React.useEffect(() => {\n control._setDisabledField({\n disabled,\n name,\n });\n }, [disabled, name, control]);\n return React.useMemo(() => ({\n field,\n formState,\n fieldState,\n }), [field, formState, fieldState]);\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm<FormValues>({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n * <form>\n * <Controller\n * control={control}\n * name=\"test\"\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n * <>\n * <input\n * onChange={onChange} // send value to hook form\n * onBlur={onBlur} // notify when input is touched\n * value={value} // return updated value\n * ref={ref} // set ref for focus management\n * />\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n * </>\n * )}\n * />\n * </form>\n * );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst flatten = (obj) => {\n const output = {};\n for (const key of Object.keys(obj)) {\n if (isObjectType(obj[key]) && obj[key] !== null) {\n const nested = flatten(obj[key]);\n for (const nestedKey of Object.keys(nested)) {\n output[`${key}.${nestedKey}`] = nested[nestedKey];\n }\n }\n else {\n output[key] = obj[key];\n }\n }\n return output;\n};\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n * <Form action=\"/api\" control={control}>\n * <input {...register(\"name\")} />\n * <p>{errors?.root?.server && 'Server error'}</p>\n * <button>Submit</button>\n * </Form>\n * );\n * }\n * ```\n */\nfunction Form(props) {\n const methods = useFormContext();\n const [mounted, setMounted] = React.useState(false);\n const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n const submit = async (event) => {\n let hasError = false;\n let type = '';\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n try {\n formDataJson = JSON.stringify(data);\n }\n catch (_a) { }\n const flattenFormValues = flatten(control._formValues);\n for (const key in flattenFormValues) {\n formData.append(key, flattenFormValues[key]);\n }\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n const response = await fetch(String(action), {\n method,\n headers: {\n ...headers,\n ...(encType && encType !== 'multipart/form-data'\n ? { 'Content-Type': encType }\n : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n if (response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n }\n else {\n onSuccess && onSuccess({ response });\n }\n }\n catch (error) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n React.useEffect(() => {\n setMounted(true);\n }, []);\n return render ? (React.createElement(React.Fragment, null, render({\n submit,\n }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\n [type]: message || true,\n },\n }\n : {};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar createSubject = () => {\n let _observers = [];\n const next = (value) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n const subscribe = (observer) => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n const unsubscribe = () => {\n _observers = [];\n };\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n\nfunction extractFormValues(fieldsState, formValues) {\n const values = {};\n for (const key in fieldsState) {\n if (fieldsState.hasOwnProperty(key)) {\n const fieldState = fieldsState[key];\n const fieldValue = formValues[key];\n if (fieldState && isObject(fieldState) && fieldValue) {\n const nestedFieldsState = extractFormValues(fieldState, fieldValue);\n if (isObject(nestedFieldsState)) {\n values[key] = nestedFieldsState;\n }\n }\n else if (fieldsState[key]) {\n values[key] = fieldValue;\n }\n }\n }\n return values;\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar isHTMLElement = (value) => {\n if (!isWeb) {\n return false;\n }\n const owner = value ? value.ownerDocument : 0;\n return (value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction baseGet(object, updatePath) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n return object;\n}\nfunction isEmptyArray(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\nfunction unset(object, path) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n const index = paths.length - 1;\n const key = paths[index];\n if (childObject) {\n delete childObject[key];\n }\n if (index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n unset(object, paths.slice(0, -1));\n }\n return object;\n}\n\nvar objectHasFunction = (data) => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n\nfunction isTraversable(value) {\n return Array.isArray(value) || (isObject(value) && !objectHasFunction(value));\n}\nfunction markFieldsDirty(data, fields = {}) {\n for (const key in data) {\n if (isTraversable(data[key])) {\n fields[key] = Array.isArray(data[key]) ? [] : {};\n markFieldsDirty(data[key], fields[key]);\n }\n else if (!isUndefined(data[key])) {\n fields[key] = true;\n }\n }\n return fields;\n}\nfunction getDirtyFields(data, formValues, dirtyFieldsFromValues) {\n if (!dirtyFieldsFromValues) {\n dirtyFieldsFromValues = markFieldsDirty(formValues);\n }\n for (const key in data) {\n if (isTraversable(data[key])) {\n if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {\n dirtyFieldsFromValues[key] = markFieldsDirty(data[key], Array.isArray(data[key]) ? [] : {});\n }\n else {\n getDirtyFields(data[key], isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n }\n }\n else {\n dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\n }\n }\n return dirtyFieldsFromValues;\n}\n\nconst defaultResult = {\n value: false,\n isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n return defaultResult;\n};\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n\nconst defaultReturn = {\n isValid: false,\n value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous, defaultReturn)\n : defaultReturn;\n\nfunction getFieldValue(_f) {\n const ref = _f.ref;\n if (isFileInput(ref)) {\n return ref.files;\n }\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n if (isCheckBoxInput(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n const fields = {};\n for (const name of fieldsNames) {\n const field = get(_fields, name);\n field && set(fields, name, field._f);\n }\n return {\n criteriaMode,\n names: [...fieldsNames],\n fields,\n shouldUseNativeValidation,\n };\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getRuleValue = (rule) => isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n\nvar getValidationModes = (mode) => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => !!fieldReference &&\n !!fieldReference.validate &&\n !!((isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find((validateFunction) => validateFunction.constructor.name === ASYNC_FUNCTION)));\n\nvar hasValidation = (options) => options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n if (field) {\n const { _f, ...currentField } = field;\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n }\n else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n }\n else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n }\n return;\n};\n\nfunction schemaErrorLookup(errors, _fields, name) {\n const error = get(errors, name);\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n const names = name.split('.');\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n if (foundError && foundError.root && foundError.root.type) {\n return {\n name: `${fieldName}.root`,\n error: foundError.root,\n };\n }\n names.pop();\n }\n return {\n name,\n };\n}\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n return (isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find((key) => _proxyFormState[key] ===\n (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some((currentName) => currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)));\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n if (mode.isOnAll) {\n return false;\n }\n else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n }\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n }\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n\nfunction getValidateError(result, ref, type = 'validate') {\n if (isString(result) ||\n (Array.isArray(result) && result.every(isString)) ||\n (isBoolean(result) && !result)) {\n return {\n type,\n message: isString(result) ? result : '',\n ref,\n };\n }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n\nvar validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, } = field._f;\n const inputValue = get(formValues, name);\n if (!mount || disabledFieldNames.has(name)) {\n return {};\n }\n const inputRef = refs ? refs[0] : ref;\n const setCustomValidity = (message) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n if (isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))) {\n const { value, message } = isString(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n const valueNumber = ref.valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n }\n else {\n const valueDate = ref.valueAsDate || new Date(inputValue);\n const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n if (exceedMax || exceedMin) {\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if ((maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n if (exceedMax || exceedMin) {\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n }\n else if (isObject(validate)) {\n let validationResult = {};\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n setCustomValidity(validateError.message);\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n setCustomValidity(true);\n return error;\n};\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n};\nfunction createFormControl(props = {}) {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState = {\n submitCount: 0,\n isDirty: false,\n isReady: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields = {};\n let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n };\n let _names = {\n mount: new Set(),\n disabled: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback;\n let timer = 0;\n const _proxyFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n let _proxySubscribeFormState = {\n ..._proxyFormState,\n };\n const _subjects = {\n array: createSubject(),\n state: createSubject(),\n };\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n const debounce = (callback) => (wait) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n const _setValid = async (shouldUpdateValid) => {\n if (!_options.disabled &&\n (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid ||\n shouldUpdateValid)) {\n const isValid = _options.resolver\n ? isEmptyObject((await _runSchema()).errors)\n : await executeBuiltInValidation(_fields, true);\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n const _updateIsValidating = (names, isValidating) => {\n if (!_options.disabled &&\n (_proxyFormState.isValidating ||\n _proxyFormState.validatingFields ||\n _proxySubscribeFormState.isValidating ||\n _proxySubscribeFormState.validatingFields)) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n if (args && method && !_options.disabled) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n if (shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))) {\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n if ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))) {\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n }\n else {\n set(_formValues, name, values);\n }\n };\n const updateErrors = (name, error) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n const _setErrors = (errors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n const field = get(_fields, name);\n if (field) {\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n isUndefined(defaultValue) ||\n (ref && ref.defaultChecked) ||\n shouldSkipSetValueAs\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n : setFieldValue(name, defaultValue);\n _state.mount && _setValid();\n }\n };\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output = {\n name,\n };\n if (!_options.disabled) {\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\n isPreviousDirty = !!get(_formState.dirtyFields, name);\n isCurrentFieldPristine\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.dirtyFields ||\n _proxySubscribeFormState.dirtyFields) &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n }\n return shouldUpdateField ? output : {};\n };\n const shouldRenderByError = (name, isValid, error, fieldState) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n if (_options.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(_options.delayError);\n }\n else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n _subjects.state.next(updatedFormState);\n }\n };\n const _runSchema = async (name) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n _updateIsValidating(name);\n return result;\n };\n const executeSchemaAndUpdateState = async (names) => {\n const { errors } = await _runSchema(names);\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n }\n else {\n _formState.errors = errors;\n }\n return errors;\n };\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\n valid: true,\n }) => {\n for (const name in fields) {\n const field = fields[name];\n if (field) {\n const { _f, ...fieldValue } = field;\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name], true);\n }\n const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !shouldOnlyCheckValid, isFieldArrayRoot);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name]);\n }\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid) {\n break;\n }\n }\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\n }\n }\n return context.valid;\n };\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field = get(_fields, name);\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name);\n }\n _names.unMount = new Set();\n };\n const _getDirty = (name, data) => !_options.disabled &&\n (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n }, isGlobal, defaultValue);\n const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));\n const setFieldValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n let fieldValue = value;\n if (field) {\n const fieldReference = field._f;\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n }\n else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.forEach((checkboxRef) => {\n if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {\n if (Array.isArray(fieldValue)) {\n checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);\n }\n else {\n checkboxRef.checked =\n fieldValue === checkboxRef.value || !!fieldValue;\n }\n }\n });\n }\n else {\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n }\n }\n else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n }\n else {\n fieldReference.ref.value = fieldValue;\n if (!fieldReference.ref.type) {\n _subjects.state.next({\n name,\n values: cloneObject(_formValues),\n });\n }\n }\n }\n }\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n options.shouldValidate && trigger(name);\n };\n const setValues = (name, value, options) => {\n for (const fieldKey in value) {\n if (!value.hasOwnProperty(fieldKey)) {\n return;\n }\n const fieldValue = value[fieldKey];\n const fieldName = name + '.' + fieldKey;\n const field = get(_fields, fieldName);\n (_names.array.has(name) ||\n isObject(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n const setValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n set(_formValues, name, cloneValue);\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: cloneObject(_formValues),\n });\n if ((_proxyFormState.isDirty ||\n _proxyFormState.dirtyFields ||\n _proxySubscribeFormState.isDirty ||\n _proxySubscribeFormState.dirtyFields) &&\n options.shouldDirty) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n }\n else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n isWatched(name, _names) && _subjects.state.next({ ..._formState, name });\n _subjects.state.next({\n name: _state.mount ? name : undefined,\n values: cloneObject(_formValues),\n });\n };\n const onChange = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name;\n let isFieldValueUpdated = true;\n const field = get(_fields, name);\n const _updateIsFieldValueUpdated = (fieldValue) => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n if (field) {\n let error;\n let isValid;\n const fieldValue = target.type\n ? getFieldValue(field._f)\n : getEventValue(event);\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation = (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n const watched = isWatched(name, _names, isBlurEvent);\n set(_formValues, name, fieldValue);\n if (isBlurEvent) {\n if (!target || !target.readOnly) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n }\n }\n else if (field._f.onChange) {\n field._f.onChange(event);\n }\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);\n const shouldRender = !isEmptyObject(fieldState) || watched;\n !isBlurEvent &&\n _subjects.state.next({\n name,\n type: event.type,\n values: cloneObject(_formValues),\n });\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {\n if (_options.mode === 'onBlur') {\n if (isBlurEvent) {\n _setValid();\n }\n }\n else if (!isBlurEvent) {\n _setValid();\n }\n }\n return (shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n }\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n if (_options.resolver) {\n const { errors } = await _runSchema([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n isValid = isEmptyObject(errors);\n }\n }\n else {\n _updateIsValidating([name], true);\n error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n }\n else if (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n if (isFieldValueUpdated) {\n field._f.deps &&\n (!Array.isArray(field._f.deps) || field._f.deps.length > 0) &&\n trigger(field._f.deps);\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n const _focusInput = (ref, key) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n const trigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name);\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n }\n else if (name) {\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\n }))).every(Boolean);\n !(!validationResult && !_formState.isValid) && _setValid();\n }\n else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n _subjects.state.next({\n ...(!isString(name) ||\n ((_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n return validationResult;\n };\n const getValues = (fieldNames, config) => {\n let values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n if (config) {\n values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);\n }\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n const getFieldState = (name, formState) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n const clearErrors = (name) => {\n name &&\n convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName));\n _subjects.state.next({\n errors: name ? _formState.errors : {},\n });\n };\n const setError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n const watch = (name, defaultValue) => isFunction(name)\n ? _subjects.state.subscribe({\n next: (payload) => 'values' in payload &&\n name(_getWatch(undefined, defaultValue), payload),\n })\n : _getWatch(name, defaultValue, true);\n const _subscribe = (props) => _subjects.state.subscribe({\n next: (formState) => {\n if (shouldSubscribeByName(props.name, formState.name, props.exact) &&\n shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {\n props.callback({\n values: { ..._formValues },\n ..._formState,\n ...formState,\n defaultValues: _defaultValues,\n });\n }\n },\n }).unsubscribe;\n const subscribe = (props) => {\n _state.mount = true;\n _proxySubscribeFormState = {\n ..._proxySubscribeFormState,\n ...props.formState,\n };\n return _subscribe({\n ...props,\n formState: _proxySubscribeFormState,\n });\n };\n const unregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n _subjects.state.next({\n values: cloneObject(_formValues),\n });\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n !options.keepIsValid && _setValid();\n };\n const _setDisabledField = ({ disabled, name, }) => {\n if ((isBoolean(disabled) && _state.mount) ||\n !!disabled ||\n _names.disabled.has(name)) {\n disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n }\n };\n const register = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n if (field) {\n _setDisabledField({\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : _options.disabled,\n name,\n });\n }\n else {\n updateValidAndValue(name, true, options.value);\n }\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || _options.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength),\n maxLength: getRuleValue(options.maxLength),\n pattern: getRuleValue(options.pattern),\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref) => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n if (radioOrCheckbox\n ? refs.find((option) => option === fieldRef)\n : fieldRef === field._f.ref) {\n return;\n }\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n updateValidAndValue(name, false, undefined, fieldRef);\n }\n else {\n field = get(_fields, name, {});\n if (field._f) {\n field._f.mount = false;\n }\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n const _focusError = () => _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n const _disableForm = (disabled) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(_fields, (ref, name) => {\n const currentField = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n }, 0, false);\n }\n };\n const handleSubmit = (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist &&\n e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n _subjects.state.next({\n isSubmitting: true,\n });\n if (_options.resolver) {\n const { errors, values } = await _runSchema();\n _formState.errors = errors;\n fieldValues = cloneObject(values);\n }\n else {\n await executeBuiltInValidation(_fields);\n }\n if (_names.disabled.size) {\n for (const name of _names.disabled) {\n unset(fieldValues, name);\n }\n }\n unset(_formState.errors, 'root');\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues, e);\n }\n catch (error) {\n onValidError = error;\n }\n }\n else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n const resetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n }\n else {\n setValue(name, options.defaultValue);\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _setValid();\n }\n _subjects.state.next({ ..._formState });\n }\n };\n const _reset = (formValues, keepStateOptions = {}) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n const fieldsToCheck = new Set([\n ..._names.mount,\n ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n ]);\n for (const fieldName of Array.from(fieldsToCheck)) {\n get(_formState.dirtyFields, fieldName)\n ? set(values, fieldName, get(_formValues, fieldName))\n : setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n if (keepStateOptions.keepFieldsRef) {\n for (const fieldName of _names.mount) {\n setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n _fields = {};\n }\n }\n _formValues = _options.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n _subjects.array.next({\n values: { ...values },\n });\n _subjects.state.next({\n values: { ...values },\n });\n }\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n disabled: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues ||\n (!_options.shouldUnregister && !isEmptyObject(values));\n _state.watch = !!_options.shouldUnregister;\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n defaultValues: _defaultValues,\n });\n };\n const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n ? formValues(_formValues)\n : formValues, keepStateOptions);\n const setFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n if (fieldRef.focus) {\n fieldRef.focus();\n options.shouldSelect &&\n isFunction(fieldRef.select) &&\n fieldRef.select();\n }\n }\n };\n const _setFormState = (updatedFormState) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n _options.defaultValues().then((values) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n const methods = {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _subscribe,\n _runSchema,\n _focusError,\n _getWatch,\n _getDirty,\n _setValid,\n _setFieldArray,\n _setDisabledField,\n _setErrors,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _removeUnmounted,\n _disableForm,\n _subjects,\n _proxyFormState,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n subscribe,\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n return {\n ...methods,\n formControl: methods,\n };\n}\n\nvar generateId = () => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16 + d) % 16 | 0;\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n\nvar appendAt = (data, value) => [\n ...data,\n ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n if (!Array.isArray(data)) {\n return [];\n }\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n};\n\nvar prependAt = (data, value) => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n let i = 0;\n const temp = [...data];\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n ? []\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nvar updateAt = (fieldValues, index, value) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n * <form onSubmit={handleSubmit(data => console.log(data))}>\n * {fields.map((item, index) => (\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\n * ))}\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n * append\n * </button>\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n const methods = useFormContext();\n const { control = methods.control, name, keyName = 'id', shouldUnregister, rules, } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\n const _actioned = React.useRef(false);\n control._names.array.add(name);\n React.useMemo(() => rules &&\n fields.length >= 0 &&\n control.register(name, rules), [control, name, fields.length, rules]);\n useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({\n next: ({ values, name: fieldArrayName, }) => {\n if (fieldArrayName === name || !fieldArrayName) {\n const fieldValues = get(values, name);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n }).unsubscribe, [control, name]);\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\n _actioned.current = true;\n control._setFieldArray(name, updatedFieldArrayValues);\n }, [control, name]);\n const append = (value, options) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n const prepend = (value, options) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n const remove = (index) => {\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n !Array.isArray(get(control._fields, name)) &&\n set(control._fields, name, undefined);\n control._setFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n const insert$1 = (index, value, options) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insert(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, insert, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n const swap = (indexA, indexB) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n argA: indexA,\n argB: indexB,\n }, false);\n };\n const move = (from, to) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n argA: from,\n argB: to,\n }, false);\n };\n const update = (index, value) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, updatedFieldArrayValues, updateAt, {\n argA: index,\n argB: updateValue,\n }, true, false);\n };\n const replace = (value) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n };\n React.useEffect(() => {\n control._state.action = false;\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n });\n if (_actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted) &&\n !getValidationModes(control._options.reValidateMode).isOnSubmit) {\n if (control._options.resolver) {\n control._runSchema([name]).then((result) => {\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n if (existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors,\n });\n }\n });\n }\n else {\n const field = get(control._fields, name);\n if (field &&\n field._f &&\n !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit)) {\n validateField(field, control._names.disabled, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\n }));\n }\n }\n }\n control._subjects.state.next({\n name,\n values: cloneObject(control._formValues),\n });\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key) => {\n if (control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n });\n control._names.focus = '';\n control._setValid();\n _actioned.current = false;\n }, [fields, name, control]);\n React.useEffect(() => {\n !get(control._formValues, name) && control._setFieldArray(name);\n return () => {\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n control._options.shouldUnregister || shouldUnregister\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, keyName, shouldUnregister]);\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert$1, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(() => fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })), [fields, keyName]),\n };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input defaultValue=\"test\" {...register(\"example\")} />\n * <input {...register(\"exampleRequired\", { required: true })} />\n * {errors.exampleRequired && <span>This field is required</span>}\n * <button>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n const _formControl = React.useRef(undefined);\n const _values = React.useRef(undefined);\n const [formState, updateFormState] = React.useState({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n isReady: false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n if (!_formControl.current) {\n if (props.formControl) {\n _formControl.current = {\n ...props.formControl,\n formState,\n };\n if (props.defaultValues && !isFunction(props.defaultValues)) {\n props.formControl.reset(props.defaultValues, props.resetOptions);\n }\n }\n else {\n const { formControl, ...rest } = createFormControl(props);\n _formControl.current = {\n ...rest,\n formState,\n };\n }\n }\n const control = _formControl.current.control;\n control._options = props;\n useIsomorphicLayoutEffect(() => {\n const sub = control._subscribe({\n formState: control._proxyFormState,\n callback: () => updateFormState({ ...control._formState }),\n reRenderRoot: true,\n });\n updateFormState((data) => ({\n ...data,\n isReady: true,\n }));\n control._formState.isReady = true;\n return sub;\n }, [control]);\n React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n React.useEffect(() => {\n if (props.mode) {\n control._options.mode = props.mode;\n }\n if (props.reValidateMode) {\n control._options.reValidateMode = props.reValidateMode;\n }\n }, [control, props.mode, props.reValidateMode]);\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n control._focusError();\n }\n }, [control, props.errors]);\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.state.next({\n values: control._getWatch(),\n });\n }, [control, props.shouldUnregister]);\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n React.useEffect(() => {\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, {\n keepFieldsRef: true,\n ...control._options.resetOptions,\n });\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n }\n else {\n control._resetDefaultValues();\n }\n }, [control, props.values]);\n React.useEffect(() => {\n if (!control._state.mount) {\n control._setValid();\n control._state.mount = true;\n }\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n control._removeUnmounted();\n });\n _formControl.current.formState = getProxyFormState(formState, control);\n return _formControl.current;\n}\n\n/**\n * Watch component that subscribes to form field changes and re-renders when watched fields update.\n *\n * @param control - The form control object from useForm\n * @param names - Array of field names to watch for changes\n * @param render - The function that receives watched values and returns ReactNode\n * @returns The result of calling render function with watched values\n *\n * @example\n * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.\n * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.\n *\n * ```tsx\n * const { control } = useForm();\n *\n * <Watch\n * control={control}\n * names={['foo', 'bar', 'baz.qux']}\n * render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}\n * />\n * ```\n */\nconst Watch = ({ control, names, render, }) => render(useWatch({ control, name: names }));\n\nexport { Controller, Form, FormProvider, Watch, appendErrors, createFormControl, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","import {\n Control,\n FieldPath,\n FieldPathValue,\n FieldValues,\n RegisterOptions,\n useController,\n} from \"react-hook-form\";\nimport { SelectOption, SelectProps } from \"../components/Select\";\n\nexport interface UseSelectFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> {\n name: TName;\n control: Control<TFieldValues>;\n options: SelectOption[];\n rules?: Omit<\n RegisterOptions<TFieldValues, TName>,\n \"disabled\" | \"valueAsNumber\" | \"valueAsDate\" | \"setValueAs\"\n >;\n defaultValue?: FieldPathValue<TFieldValues, TName>;\n}\n\nexport function useSelectField<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n name,\n control,\n options: _options,\n rules,\n defaultValue,\n}: UseSelectFieldProps<TFieldValues, TName>) {\n const {\n field,\n fieldState: { error, invalid },\n } = useController({\n name,\n control,\n rules,\n defaultValue,\n });\n\n const selectProps: Omit<SelectProps, \"options\"> = {\n value: field.value,\n onChange: (value) => field.onChange(value),\n isError: invalid,\n error: error?.message,\n };\n\n return {\n selectProps,\n field,\n error,\n invalid,\n };\n}\n","import { LucideIcon, Search, X } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { useDebounce } from \"../../hooks\";\nimport { Input } from \"../Input/Input\";\n\n// Generic interface for searchable entities\nexport interface SearchableEntity {\n id: string;\n [key: string]: unknown;\n}\n\ninterface SearchAutocompleteProps<T extends SearchableEntity> {\n onSelect: (id: string, entity?: T) => void;\n selectedId: string;\n searchFunction: (keyword: string) => Promise<T[]>;\n getEntityById?: (id: string) => Promise<T | undefined>;\n getDisplayValue: (entity: T) => string;\n getSecondaryText?: (entity: T) => string | null;\n placeholder: string;\n icon?: LucideIcon;\n disabled?: boolean;\n minSearchLength?: number;\n debounceTime?: number;\n error?: string;\n}\n\nexport function SearchAutocomplete<T extends SearchableEntity>({\n onSelect,\n selectedId,\n searchFunction,\n getEntityById,\n getDisplayValue,\n getSecondaryText,\n placeholder,\n icon = Search,\n disabled = false,\n minSearchLength = 2,\n debounceTime = 300,\n error,\n}: SearchAutocompleteProps<T>) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [entities, setEntities] = useState<T[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [showDropdown, setShowDropdown] = useState(false);\n const [selectedEntity, setSelectedEntity] = useState<T | null>(null);\n const [initialLoadDone, setInitialLoadDone] = useState(false);\n const [searchError, setSearchError] = useState<string | null>(null);\n\n const dropdownRef = useRef<HTMLDivElement>(null);\n const debouncedSearchTerm = useDebounce(searchTerm, debounceTime);\n\n // Track if this is an initial load or a user-initiated search\n const isUserSearch = useRef(false);\n\n // Only fetch the selected entity by ID once on initial load\n useEffect(() => {\n const fetchSelectedEntity = async () => {\n // Only fetch if we have a selectedId, getEntityById function, and haven't loaded yet\n if (!selectedId || !getEntityById || initialLoadDone) return;\n\n setIsLoading(true);\n try {\n const entity = await getEntityById(selectedId);\n if (entity) {\n setSelectedEntity(entity);\n setSearchTerm(getDisplayValue(entity));\n }\n } catch (error) {\n console.error(\"Error fetching selected entity:\", error);\n } finally {\n setIsLoading(false);\n setInitialLoadDone(true);\n }\n };\n\n fetchSelectedEntity();\n }, [selectedId, getEntityById, getDisplayValue, initialLoadDone]);\n\n // Handle search term changes - only for user-initiated searches\n useEffect(() => {\n // Skip if this is just setting the initial value\n if (!isUserSearch.current) return;\n\n // Clear entities if search term is too short\n if (searchTerm.trim().length < minSearchLength) {\n setEntities([]);\n setSearchError(null);\n }\n }, [searchTerm, minSearchLength]);\n\n // Fetch entities when debounced search term changes - only for user searches\n useEffect(() => {\n const fetchEntities = async () => {\n if (\n !debouncedSearchTerm ||\n debouncedSearchTerm.length < minSearchLength\n ) {\n return;\n }\n\n setIsLoading(true);\n setSearchError(null);\n try {\n const results = await searchFunction(debouncedSearchTerm);\n setEntities(results);\n } catch (error) {\n console.error(\"Error fetching search results:\", error);\n setSearchError(\n error instanceof Error ? error.message : \"Search failed\"\n );\n } finally {\n setIsLoading(false);\n }\n };\n\n // Only fetch if this is a user-initiated search\n if (isUserSearch.current) {\n fetchEntities();\n }\n }, [debouncedSearchTerm, searchFunction, minSearchLength]);\n\n // Handle click outside to close dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setShowDropdown(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n // Mark this as a user-initiated search\n isUserSearch.current = true;\n\n setSearchTerm(value);\n\n if (selectedEntity) {\n setSelectedEntity(null);\n onSelect(\"\");\n }\n\n setShowDropdown(value.trim().length >= minSearchLength);\n };\n\n const handleEntitySelect = (entity: T) => {\n // This is a user selection, not an API fetch\n isUserSearch.current = false;\n\n console.log(`Selected entity with ID: ${entity.id}`);\n setSelectedEntity(entity);\n setSearchTerm(getDisplayValue(entity));\n onSelect(entity.id, entity);\n setShowDropdown(false);\n };\n\n const handleClearSelection = () => {\n // This is a user action, but not a search\n isUserSearch.current = false;\n\n setSelectedEntity(null);\n setSearchTerm(\"\");\n onSelect(\"\");\n };\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n <div className=\"relative\">\n <Input\n type=\"text\"\n placeholder={`${placeholder} (min. ${minSearchLength} characters)`}\n value={selectedEntity ? \"\" : searchTerm}\n onChange={handleSearchChange}\n onFocus={() =>\n searchTerm.length >= minSearchLength &&\n isUserSearch.current &&\n setShowDropdown(true)\n }\n disabled={disabled}\n autoComplete=\"off\"\n name=\"search-autocomplete\"\n leftIcon={React.createElement(icon, { size: 16 })}\n />\n\n {selectedEntity && (\n <button\n type=\"button\"\n className=\"flex absolute inset-y-0 right-0 items-center pr-3\"\n onClick={handleClearSelection}\n disabled={disabled}\n >\n <X className=\"w-5 h-5 text-gray-400 hover:text-gray-500\" />\n </button>\n )}\n </div>\n\n {/* Selected Entity Display */}\n {selectedEntity && (\n <div className=\"p-4 mt-3 rounded-lg border bg-neutral-50 border-neutral-200\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center\">\n {(selectedEntity as { photoUrl?: string }).photoUrl ? (\n <img\n src={(selectedEntity as { photoUrl?: string }).photoUrl!}\n alt={getDisplayValue(selectedEntity)}\n className=\"object-cover mr-3 w-10 h-10 rounded-full\"\n />\n ) : (\n React.createElement(icon, {\n className: \"w-10 h-10 text-neutral-400 mr-3\",\n })\n )}\n <div>\n <div className=\"font-medium text-neutral-900\">\n {getDisplayValue(selectedEntity)}\n </div>\n {getSecondaryText && getSecondaryText(selectedEntity) && (\n <div className=\"text-sm text-neutral-500\">\n {getSecondaryText(selectedEntity)}\n </div>\n )}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={handleClearSelection}\n className=\"transition-colors text-neutral-400 hover:text-neutral-600\"\n disabled={disabled}\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n )}\n\n {showDropdown && entities?.length > 0 && (\n <div className=\"overflow-auto absolute z-10 mt-1 w-full max-h-60 bg-white rounded-md shadow-lg\">\n <ul className=\"py-1\">\n {entities.map((entity) => (\n <li\n key={entity.id}\n className=\"px-4 py-2 cursor-pointer hover:bg-gray-100\"\n onClick={() => handleEntitySelect(entity)}\n >\n <div className=\"flex items-center\">\n {React.createElement(icon, {\n className: \"w-4 h-4 text-gray-400\",\n })}\n <div className=\"ml-2\">\n <div className=\"font-medium\">{getDisplayValue(entity)}</div>\n {getSecondaryText && getSecondaryText(entity) && (\n <div className=\"text-xs text-gray-500\">\n {getSecondaryText(entity)}\n </div>\n )}\n </div>\n </div>\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {showDropdown && searchError && (\n <div className=\"absolute z-10 p-4 mt-1 w-full text-center text-red-600 bg-white rounded-md border border-red-200 shadow-lg\">\n <div className=\"flex justify-center items-center\">\n <X className=\"mr-2 w-4 h-4\" />\n Error: {searchError}\n </div>\n </div>\n )}\n\n {showDropdown && error && !searchError && (\n <div className=\"absolute z-10 p-4 mt-1 w-full text-center text-red-600 bg-white rounded-md border border-red-200 shadow-lg\">\n <div className=\"flex justify-center items-center\">\n <X className=\"mr-2 w-4 h-4\" />\n {error}\n </div>\n </div>\n )}\n\n {showDropdown &&\n debouncedSearchTerm &&\n entities?.length === 0 &&\n !isLoading &&\n !searchError &&\n !error && (\n <div className=\"absolute z-10 p-4 mt-1 w-full text-center text-gray-500 bg-white rounded-md shadow-lg\">\n {debouncedSearchTerm.length < minSearchLength\n ? `Type at least ${minSearchLength} characters to search`\n : \"No results found. Try a different search term.\"}\n </div>\n )}\n\n {isLoading && showDropdown && (\n <div className=\"absolute z-10 p-4 mt-1 w-full text-center text-gray-500 bg-white rounded-md shadow-lg\">\n <div className=\"flex justify-center items-center\">\n <div className=\"mr-2 w-4 h-4 rounded-full border-b-2 animate-spin border-ews-primary\"></div>\n Loading...\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { Check, Search, X } from \"lucide-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useDebounce } from \"../../hooks\";\nimport { cn } from \"../../utils\";\nimport { Input } from \"../Input/Input\";\nimport { SearchableEntity } from \"../SearchAutocomplete/SearchAutocomplete\";\n\ninterface MultiSearchAutocompleteProps<T extends SearchableEntity> {\n items: T[];\n selectedItems: T[];\n onSelectionChange: (items: T[]) => void;\n onSearch: (searchTerm: string) => Promise<void>;\n getEntityById?: (id: string) => Promise<T | undefined>;\n getPrimaryText: (entity: T) => string;\n getSecondaryText?: (entity: T) => string | null;\n placeholder: string;\n disabled?: boolean;\n loading?: boolean;\n multiple?: boolean;\n className?: string;\n renderSelectedItem?: (entity: T) => React.ReactNode;\n renderListItem?: (entity: T, isSelected: boolean) => React.ReactNode;\n keepOpenOnSelect?: boolean;\n error?: string;\n minSearchLength?: number;\n debounceTime?: number;\n}\n\nexport function MultiSearchAutocomplete<T extends SearchableEntity>({\n items,\n selectedItems,\n onSelectionChange,\n onSearch,\n getEntityById: _getEntityById,\n getPrimaryText,\n getSecondaryText,\n placeholder,\n disabled = false,\n loading = false,\n multiple = true,\n className,\n renderSelectedItem,\n renderListItem,\n keepOpenOnSelect = true,\n error,\n minSearchLength = 2,\n debounceTime = 300,\n}: MultiSearchAutocompleteProps<T>) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [isOpen, setIsOpen] = useState(false);\n const [filteredItems, setFilteredItems] = useState<T[]>(items);\n const [isSearching, setIsSearching] = useState(false);\n const [searchError, setSearchError] = useState<string | null>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const debouncedSearchTerm = useDebounce(searchTerm, debounceTime);\n\n // Handle search term changes\n useEffect(() => {\n // If search term is empty, show all items\n if (!searchTerm.trim()) {\n setFilteredItems(items);\n setSearchError(null);\n return;\n }\n\n // If search term is too short, don't search\n if (searchTerm.length < minSearchLength) {\n setFilteredItems([]);\n setSearchError(null);\n return;\n }\n }, [searchTerm, items, minSearchLength]);\n\n // Debounced search with API calls\n useEffect(() => {\n // If debounced search term is empty or too short, don't search\n if (\n !debouncedSearchTerm.trim() ||\n debouncedSearchTerm.length < minSearchLength\n ) {\n return;\n }\n\n const performSearch = async () => {\n try {\n setIsSearching(true);\n setSearchError(null);\n await onSearch(debouncedSearchTerm);\n } catch (err) {\n setSearchError(err instanceof Error ? err.message : \"Search failed\");\n } finally {\n setIsSearching(false);\n }\n };\n\n performSearch();\n }, [debouncedSearchTerm, onSearch, minSearchLength]);\n\n // Update filtered items when items prop changes\n useEffect(() => {\n setFilteredItems(items);\n }, [items]);\n\n const handleItemToggle = useCallback(\n (item: T) => {\n if (multiple) {\n const isSelected = selectedItems.some(\n (selected) => selected.id === item.id\n );\n\n if (isSelected) {\n onSelectionChange(\n selectedItems.filter((selected) => selected.id !== item.id)\n );\n } else {\n onSelectionChange([...selectedItems, item]);\n }\n // Keep dropdown open for multiple selection\n if (keepOpenOnSelect) {\n setIsOpen(true);\n }\n } else {\n onSelectionChange([item]);\n setIsOpen(false);\n }\n },\n [selectedItems, onSelectionChange, multiple, keepOpenOnSelect]\n );\n\n const handleRemoveItem = useCallback(\n (itemToRemove: T) => {\n onSelectionChange(\n selectedItems.filter((item) => item.id !== itemToRemove.id)\n );\n },\n [selectedItems, onSelectionChange]\n );\n\n const handleInputFocus = () => {\n if (!disabled) {\n setIsOpen(true);\n }\n };\n\n const handleInputBlur = () => {\n // Don't close immediately to allow for clicks on dropdown items\n // Only close if keepOpenOnSelect is false\n if (!keepOpenOnSelect) {\n setTimeout(() => setIsOpen(false), 150);\n }\n };\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n const handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscapeKey);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscapeKey);\n };\n }, [isOpen]);\n\n // Default render functions\n const defaultRenderSelectedItem = (entity: T) => (\n <span className=\"inline-flex items-center px-3 py-1 text-sm font-medium rounded-full border bg-ews-primary/10 text-ews-primary border-ews-primary/20\">\n {getPrimaryText(entity)}\n <button\n type=\"button\"\n onClick={() => handleRemoveItem(entity)}\n className=\"ml-2 text-ews-primary/60 hover:text-ews-primary\"\n disabled={disabled}\n title=\"Remove item\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n );\n\n const defaultRenderListItem = (entity: T, isSelected: boolean) => (\n <div className=\"flex items-center space-x-3\">\n <div\n className={cn(\n \"flex justify-center items-center w-5 h-5 rounded border-2\",\n isSelected\n ? \"bg-ews-primary border-ews-primary\"\n : \"border-ews-gray-300\"\n )}\n >\n {isSelected && <Check className=\"w-3 h-3 text-white\" />}\n </div>\n <div className=\"flex flex-col\">\n <span\n className={cn(\n \"font-medium\",\n isSelected ? \"text-ews-primary\" : \"text-gray-900\"\n )}\n >\n {getPrimaryText(entity)}\n </span>\n {getSecondaryText && (\n <span\n className={cn(\n \"text-sm\",\n isSelected ? \"text-ews-primary/70\" : \"text-gray-500\"\n )}\n >\n {getSecondaryText(entity)}\n </span>\n )}\n </div>\n </div>\n );\n\n return (\n <div className={cn(\"relative\", className)} ref={dropdownRef}>\n {/* Selected items display */}\n {selectedItems.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mb-3\">\n {selectedItems.map((item) => (\n <div key={item.id}>\n {renderSelectedItem\n ? renderSelectedItem(item)\n : defaultRenderSelectedItem(item)}\n </div>\n ))}\n </div>\n )}\n\n {/* Search input */}\n <Input\n ref={inputRef}\n type=\"text\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n placeholder={placeholder}\n disabled={disabled}\n leftIcon={<Search className=\"w-4 h-4\" />}\n className=\"w-full\"\n />\n\n {/* Dropdown */}\n {isOpen && !disabled && (\n <div className=\"overflow-auto absolute z-10 mt-1 w-full max-h-60 bg-white rounded-lg border border-gray-200 shadow-lg\">\n {loading || isSearching ? (\n <div className=\"flex items-center px-4 py-3 text-sm text-gray-500\">\n <div className=\"mr-2 w-4 h-4 rounded-full border-b-2 animate-spin border-ews-primary\"></div>\n {isSearching ? \"Searching...\" : \"Loading...\"}\n </div>\n ) : searchError ? (\n <div className=\"px-4 py-3 text-sm text-red-600\">\n <div className=\"flex items-center\">\n <X className=\"mr-2 w-4 h-4\" />\n Error: {searchError}\n </div>\n </div>\n ) : error ? (\n <div className=\"px-4 py-3 text-sm text-red-600\">\n <div className=\"flex items-center\">\n <X className=\"mr-2 w-4 h-4\" />\n {error}\n </div>\n </div>\n ) : filteredItems.length === 0 ? (\n <div className=\"px-4 py-3 text-sm text-gray-500\">\n {searchTerm.length < minSearchLength\n ? `Type at least ${minSearchLength} characters to search`\n : \"No items found\"}\n </div>\n ) : (\n <div className=\"py-1\">\n {filteredItems.map((item) => {\n const isSelected = selectedItems.some(\n (selected) => selected.id === item.id\n );\n\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemToggle(item)}\n className={cn(\n \"flex items-center px-4 py-3 w-full text-left transition-colors\",\n isSelected\n ? \"border-l-4 bg-ews-primary/10 text-ews-primary border-ews-primary\"\n : \"text-gray-900 hover:bg-ews-primary/5\"\n )}\n >\n {renderListItem\n ? renderListItem(item, isSelected)\n : defaultRenderListItem(item, isSelected)}\n </button>\n );\n })}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { AlertCircle, AlertTriangle, CheckCircle, X } from \"lucide-react\";\nimport React, { useEffect } from \"react\";\nimport { cn } from \"../../utils\";\nimport { Button } from \"../Button/Button\";\n\nexport interface ErrorField {\n name: string;\n message: string;\n path?: string;\n}\n\nexport interface ErrorObject {\n code: string;\n message: string;\n fields?: ErrorField[];\n}\n\nexport interface ModalProps {\n /**\n * Whether the modal is open\n */\n isOpen: boolean;\n /**\n * Function to call when modal should be closed\n */\n onClose: () => void;\n /**\n * Modal title\n */\n title: string;\n /**\n * Modal content/description\n */\n children?: React.ReactNode;\n /**\n * Modal variant\n */\n variant?: \"error\" | \"warning\" | \"confirmation\" | \"info\";\n /**\n * Modal size/width\n */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n /**\n * Primary action button text\n */\n primaryAction?: string;\n /**\n * Secondary action button text\n */\n secondaryAction?: string;\n /**\n * Function to call when primary action is clicked\n */\n onPrimaryAction?: () => void;\n /**\n * Function to call when secondary action is clicked\n */\n onSecondaryAction?: () => void;\n /**\n * Whether the primary action button is loading\n */\n isLoading?: boolean;\n /**\n * Whether the modal can be closed by clicking outside or pressing escape\n */\n closeOnOverlayClick?: boolean;\n /**\n * Custom className for the modal\n */\n className?: string;\n /**\n * Custom className for the content\n */\n contentClassName?: string;\n /**\n * Error object for error modals\n */\n error?: ErrorObject;\n}\n\nconst Modal = ({\n isOpen,\n onClose,\n title,\n children,\n variant = \"info\",\n size = \"md\",\n primaryAction,\n secondaryAction,\n onPrimaryAction,\n onSecondaryAction,\n isLoading = false,\n closeOnOverlayClick = true,\n className,\n contentClassName,\n error,\n}: ModalProps) => {\n // Handle escape key press\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && isOpen) {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"keydown\", handleEscape);\n // Prevent body scroll when modal is open\n document.body.style.overflow = \"hidden\";\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"unset\";\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n const getVariantStyles = () => {\n switch (variant) {\n case \"error\":\n return {\n icon: <AlertCircle className=\"w-6 h-6 text-ews-error\" />,\n iconBg: \"bg-ews-error/10\",\n titleColor: \"text-ews-error\",\n borderColor: \"border-ews-error/20\",\n };\n case \"warning\":\n return {\n icon: <AlertTriangle className=\"w-6 h-6 text-ews-warning\" />,\n iconBg: \"bg-ews-warning/10\",\n titleColor: \"text-ews-warning\",\n borderColor: \"border-ews-warning/20\",\n };\n case \"confirmation\":\n return {\n icon: <CheckCircle className=\"w-6 h-6 text-ews-success\" />,\n iconBg: \"bg-ews-success/10\",\n titleColor: \"text-ews-success\",\n borderColor: \"border-ews-success/20\",\n };\n default:\n return {\n icon: <AlertCircle className=\"w-6 h-6 text-ews-primary\" />,\n iconBg: \"bg-ews-primary/10\",\n titleColor: \"text-ews-primary\",\n borderColor: \"border-ews-primary/20\",\n };\n }\n };\n\n const variantStyles = getVariantStyles();\n\n const getSizeClasses = () => {\n const sizeMap = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n \"2xl\": \"max-w-2xl\",\n full: \"max-w-full\",\n };\n return sizeMap[size] || sizeMap.md;\n };\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && closeOnOverlayClick) {\n onClose();\n }\n };\n\n return (\n <div className=\"flex fixed inset-0 z-50 justify-center items-center\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 backdrop-blur-sm bg-black/50\"\n onClick={handleOverlayClick}\n />\n\n {/* Modal */}\n <div\n className={cn(\n \"relative w-full bg-white rounded-lg shadow-xl transition-all transform\",\n \"duration-200 animate-in fade-in-0 zoom-in-95\",\n getSizeClasses(),\n \"mx-4\",\n className\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"modal-title\"\n >\n {/* Header */}\n <div\n className={cn(\n \"flex items-center justify-between p-6 border-b\",\n variantStyles.borderColor\n )}\n >\n <div className=\"flex items-center space-x-3\">\n <div className={cn(\"p-2 rounded-full\", variantStyles.iconBg)}>\n {variantStyles.icon}\n </div>\n <h2\n id=\"modal-title\"\n className={cn(\"text-lg font-semibold\", variantStyles.titleColor)}\n >\n {title}\n </h2>\n </div>\n <button\n onClick={onClose}\n className=\"p-1 text-gray-400 transition-colors hover:text-gray-600\"\n aria-label=\"Close modal\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Content */}\n <div className={cn(\"p-6\", contentClassName)}>\n <div className=\"leading-relaxed text-gray-700\">\n {error && variant === \"error\" ? (\n <div className=\"space-y-3\">\n <p>{error.message}</p>\n {error.fields && error.fields.length > 0 && (\n <div>\n <p className=\"font-semibold text-gray-900\">\n Erreurs de champ:\n </p>\n <ul className=\"mt-2 space-y-1\">\n {error.fields.map((field, index) => (\n <li key={index} className=\"text-ews-error\">\n • {field.path}: {field.message}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : (\n children\n )}\n </div>\n </div>\n\n {/* Actions */}\n {(primaryAction || secondaryAction) && (\n <div className=\"flex justify-end items-center p-6 pt-0 space-x-3\">\n {secondaryAction && (\n <Button\n variant=\"outline\"\n onClick={onSecondaryAction || onClose}\n disabled={isLoading}\n >\n {secondaryAction}\n </Button>\n )}\n {primaryAction && (\n <Button\n variant={variant === \"error\" ? \"error\" : \"ews-primary\"}\n onClick={onPrimaryAction}\n loading={isLoading}\n >\n {primaryAction}\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Modal };\n","import { Pencil, Trash } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\n\nimport { cn } from \"../../utils\";\nimport { Modal } from \"../Modal/Modal\";\n\nexport interface ProfileImageUploadProps {\n /** Current image URL */\n imageUrl: string;\n /** Alt text for accessibility */\n altText: string;\n /** Disable editing */\n readOnly?: boolean;\n /** Avatar diameter */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Upload progress 0–100.\n * Progress bar is hidden when 0; auto-hides 1 s after reaching 100.\n */\n uploadProgress?: number;\n /**\n * When true the progress bar stays visible in an indeterminate (pulsing)\n * state for phases with no measurable progress (pre-upload / post-upload).\n * The bar auto-hides 1 s after both `isLoading` is false and progress reached 100.\n */\n isLoading?: boolean;\n /**\n * Whether to show the delete button.\n * Pass `false` when `imageUrl` is a default/fallback image.\n */\n showDeleteButton?: boolean;\n /** File input accept attribute (default: \"image/*\") */\n accept?: string;\n /** Max allowed file size in MB (default: 3) */\n maxFileSizeMB?: number;\n /** Called when a valid file is selected */\n onFileSelect: (file: File) => void;\n /** Called when the selected file exceeds `maxFileSizeMB` */\n onFileSizeExceeded?: () => void;\n /** Called when the user confirms deletion in the modal */\n onDeleteConfirm: () => void;\n /** Deletion confirmation modal — title text */\n deleteConfirmTitle: string;\n /** Deletion confirmation modal — body text */\n deleteConfirmMessage: string;\n /** Deletion confirmation modal — primary button label */\n deleteConfirmLabel: string;\n /** Deletion confirmation modal — secondary / cancel label */\n cancelLabel: string;\n}\n\nconst SIZE_CLASSES: Record<\"sm\" | \"md\" | \"lg\", string> = {\n sm: \"h-10 w-10\",\n md: \"h-16 w-16\",\n lg: \"h-32 w-32\",\n};\n\nconst INDICATOR_CLASSES: Record<\"sm\" | \"md\" | \"lg\", string> = {\n sm: \"h-2 w-2\",\n md: \"h-4 w-4\",\n lg: \"h-8 w-8\",\n};\n\nfunction UploadProgressBar({\n progress,\n isLoading,\n}: {\n progress: number;\n isLoading?: boolean;\n}) {\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (isLoading) {\n setVisible(true);\n return;\n }\n // isLoading just turned false\n if (progress >= 100) {\n setVisible(true);\n const t = setTimeout(() => setVisible(false), 1000);\n return () => clearTimeout(t);\n }\n // Legacy path (no isLoading prop): driven purely by progress\n if (progress > 0 && progress < 100) {\n setVisible(true);\n return;\n }\n setVisible(false);\n }, [progress, isLoading]);\n\n if (!visible) return null;\n\n const indeterminate = isLoading && progress === 0;\n\n return (\n <div className=\"mt-2 h-1.5 w-32 rounded-full bg-gray-200\">\n <div\n className={cn(\n \"h-full rounded-full bg-ews-primary transition-all duration-300\",\n indeterminate && \"animate-pulse\"\n )}\n style={{ width: indeterminate ? \"35%\" : `${progress}%` }}\n />\n </div>\n );\n}\n\nexport const ProfileImageUpload: React.FC<ProfileImageUploadProps> = ({\n imageUrl,\n altText,\n readOnly = false,\n size = \"lg\",\n uploadProgress = 0,\n isLoading = false,\n showDeleteButton = true,\n accept = \"image/*\",\n maxFileSizeMB = 3,\n onFileSelect,\n onFileSizeExceeded,\n onDeleteConfirm,\n deleteConfirmTitle,\n deleteConfirmMessage,\n deleteConfirmLabel,\n cancelLabel,\n}) => {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [isHovered, setIsHovered] = useState(false);\n const [showConfirm, setShowConfirm] = useState(false);\n\n const handleEditClick = () => fileInputRef.current?.click();\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n if (file.size > maxFileSizeMB * 1024 * 1024) {\n onFileSizeExceeded?.();\n e.target.value = \"\";\n return;\n }\n\n onFileSelect(file);\n e.target.value = \"\"; // allow re-selecting the same file\n };\n\n const handleConfirmDelete = () => {\n setShowConfirm(false);\n onDeleteConfirm();\n };\n\n return (\n <>\n <div className=\"inline-flex flex-col items-center\">\n <div\n className=\"relative\"\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <img\n src={imageUrl}\n alt={altText}\n className={cn(\n \"rounded-full border-4 border-white object-cover\",\n SIZE_CLASSES[size]\n )}\n />\n\n {/* Online status dot */}\n <div\n className={cn(\n \"absolute bottom-0 right-0 rounded-full border-4 border-white bg-green-400\",\n INDICATOR_CLASSES[size]\n )}\n />\n\n <input\n type=\"file\"\n ref={fileInputRef}\n accept={accept}\n className=\"hidden\"\n onChange={handleFileChange}\n />\n\n {isHovered && !readOnly && !isLoading && (\n <>\n {/* Edit / upload button */}\n <button\n type=\"button\"\n onClick={handleEditClick}\n className=\"absolute left-0 top-0 flex h-8 w-8 cursor-pointer items-center justify-center rounded-full bg-ews-primary transition-colors hover:bg-ews-secondary\"\n aria-label=\"Edit profile image\"\n >\n <Pencil className=\"h-4 w-4 text-white\" />\n </button>\n\n {/* Delete button — only when not a fallback/default image */}\n {showDeleteButton && (\n <button\n type=\"button\"\n onClick={() => setShowConfirm(true)}\n className=\"absolute left-0 top-10 flex h-8 w-8 cursor-pointer items-center justify-center rounded-full bg-red-600 transition-colors hover:bg-red-700\"\n aria-label=\"Delete profile image\"\n >\n <Trash className=\"h-4 w-4 text-white\" />\n </button>\n )}\n </>\n )}\n </div>\n\n <UploadProgressBar progress={uploadProgress} isLoading={isLoading} />\n </div>\n\n {/* Delete confirmation */}\n <Modal\n isOpen={showConfirm}\n onClose={() => setShowConfirm(false)}\n title={deleteConfirmTitle}\n variant=\"error\"\n size=\"sm\"\n primaryAction={deleteConfirmLabel}\n secondaryAction={cancelLabel}\n onPrimaryAction={handleConfirmDelete}\n onSecondaryAction={() => setShowConfirm(false)}\n >\n <p>{deleteConfirmMessage}</p>\n </Modal>\n </>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { Control, Controller, FieldValues, Path } from \"react-hook-form\";\nimport { cn } from \"../../utils\";\nimport { Input } from \"../Input\";\n\nexport interface DropdownMultiSelectProps<T extends FieldValues, TValue> {\n options: { value: TValue; label: string }[];\n name: Path<T>;\n control?: Control<T>;\n placeholder?: string;\n onChange?: (value: TValue[]) => void;\n value?: TValue[];\n defaultValue?: TValue[];\n onValidate?: (value: TValue[]) => boolean;\n disabled?: boolean;\n error?: string;\n label?: string;\n className?: string;\n searchPlaceholder?: string;\n}\n\nconst DropdownMultiSelect = <\n T extends FieldValues,\n TValue extends string | number | object\n>({\n options,\n name,\n control,\n placeholder = \"Select options\",\n searchPlaceholder = \"Search...\",\n onChange,\n value: controlledValue,\n defaultValue,\n onValidate,\n disabled = false,\n error,\n label,\n className,\n}: DropdownMultiSelectProps<T, TValue>) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [uncontrolledValue, setUncontrolledValue] = useState<\n TValue[] | undefined\n >(defaultValue);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchTerm(\"\");\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n const removeAccents = (str: string) =>\n str\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/ç/g, \"c\")\n .replace(/é|è|ê|ë/g, \"e\")\n .replace(/à|á|â|ã|ä/g, \"a\")\n .replace(/î|ï/g, \"i\")\n .replace(/ô|ö/g, \"o\")\n .replace(/ù|ú|û|ü/g, \"u\");\n\n const getDisplayValue = (value: TValue) => {\n if (typeof value === \"string\" || typeof value === \"number\") {\n return String(value);\n }\n return options.find((opt) => opt.value === value)?.label || \"\";\n };\n\n const filteredOptions = options.filter((option) =>\n removeAccents(option.label.toLowerCase()).includes(\n removeAccents(searchTerm.toLowerCase())\n )\n );\n\n const renderDropdown = ({\n value = [] as TValue[],\n onChange: fieldOnChange,\n }: {\n value: TValue[] | undefined;\n onChange: (value: TValue[]) => void;\n }) => (\n <div className={cn(\"relative\", className)} ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={handleToggle}\n aria-label={name}\n disabled={disabled}\n className={cn(\n \"flex w-full items-center justify-between rounded-md border border-ews-gray-300 bg-white px-3 py-2 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-ews-primary focus:ring-offset-0 disabled:bg-ews-gray-50 disabled:text-ews-gray-500\",\n isOpen ? \"rounded-b-none border-b-0\" : \"rounded-md\",\n error && \"border-ews-error focus:ring-ews-error\"\n )}\n >\n <span className={cn(\"truncate\", !value?.length && \"text-ews-gray-500\")}>\n {value?.length > 0\n ? value.map((v) => getDisplayValue(v)).join(\", \")\n : placeholder}\n </span>\n <span\n className={cn(\n \"ml-2 w-4 h-4 transition-transform transform\",\n isOpen ? \"rotate-180\" : \"rotate-0\"\n )}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </span>\n </button>\n\n {isOpen && (\n <div className=\"absolute z-50 w-full bg-white rounded-b-md border border-t-0 shadow-lg border-ews-gray-300\">\n {/* Search Input */}\n <div className=\"p-2 border-b border-ews-gray-200\">\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"p-0 border-0 shadow-none focus:ring-0\"\n size=\"sm\"\n />\n </div>\n\n {/* Scrollable Options List */}\n <div className=\"overflow-y-auto max-h-48\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option) => (\n <div\n key={getDisplayValue(option.value)}\n className=\"flex items-center p-2 cursor-pointer hover:bg-ews-gray-100\"\n onClick={() => {\n const currentValue = value ?? [];\n const isSelected = currentValue.some(\n (item: TValue) =>\n JSON.stringify(item) === JSON.stringify(option.value)\n );\n const newValue = isSelected\n ? currentValue.filter(\n (item: TValue) =>\n JSON.stringify(item) !==\n JSON.stringify(option.value)\n )\n : [...currentValue, option.value];\n\n if (onValidate && !onValidate(newValue)) {\n return;\n }\n fieldOnChange(newValue);\n onChange?.(newValue);\n }}\n >\n <input\n type=\"checkbox\"\n checked={(value ?? []).some(\n (item: TValue) =>\n JSON.stringify(item) === JSON.stringify(option.value)\n )}\n onChange={(e) => {\n e.stopPropagation();\n const currentValue = value ?? [];\n const isSelected = currentValue.some(\n (item: TValue) =>\n JSON.stringify(item) === JSON.stringify(option.value)\n );\n const newValue = isSelected\n ? currentValue.filter(\n (item: TValue) =>\n JSON.stringify(item) !==\n JSON.stringify(option.value)\n )\n : [...currentValue, option.value];\n\n if (onValidate && !onValidate(newValue)) {\n return;\n }\n fieldOnChange(newValue);\n onChange?.(newValue);\n }}\n onClick={(e) => e.stopPropagation()}\n className=\"mr-3 w-4 h-4 rounded border-ews-gray-300 text-ews-primary focus:ring-ews-primary\"\n />\n <label className=\"text-sm cursor-pointer text-ews-gray-700\">\n {option.label}\n </label>\n </div>\n ))\n ) : (\n <div className=\"p-2 text-sm text-ews-gray-500\">\n No options found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n\n // Render controlled version with react-hook-form\n if (control) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { value, onChange } }) => (\n <div>\n {label && (\n <label className=\"block mb-1 text-sm font-medium text-ews-gray-700\">\n {label}\n </label>\n )}\n {renderDropdown({ value, onChange })}\n {error && <p className=\"mt-1 text-sm text-ews-error\">{error}</p>}\n </div>\n )}\n />\n );\n }\n\n // Render uncontrolled version\n return (\n <div>\n {label && (\n <label className=\"block mb-1 text-sm font-medium text-ews-gray-700\">\n {label}\n </label>\n )}\n {renderDropdown({\n value: controlledValue ?? uncontrolledValue,\n onChange: (newValue) => {\n if (controlledValue === undefined) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n },\n })}\n {error && <p className=\"mt-1 text-sm text-ews-error\">{error}</p>}\n </div>\n );\n};\n\nexport { DropdownMultiSelect };\n","import { cn } from \"../../utils\";\nimport type { LogoProps } from \"./Logo.types\";\n\nconst Logo = ({\n size = \"md\",\n showTagline: _showTagline = true,\n iconOnly = false,\n variant = \"normal\",\n className,\n onClick,\n customSrc,\n alt = \"MEDECINE 360 Logo\",\n clickable = false,\n}: LogoProps) => {\n const sizes = {\n sm: \"h-8\",\n md: \"h-12\",\n lg: \"h-16\",\n xl: \"h-24\",\n };\n\n const iconSizes = {\n sm: \"h-6 w-6\",\n md: \"h-8 w-8\",\n lg: \"h-12 w-12\",\n xl: \"h-16 w-16\",\n };\n\n // Get the appropriate logo image based on variant or custom source\n // For iconOnly, always use favicon.ico unless customSrc is provided\n const logoSrc =\n customSrc ||\n (iconOnly\n ? \"/favicon.ico\"\n : variant === \"white\"\n ? \"/image/logoWhite.png\"\n : variant === \"fullWhite\"\n ? \"/image/logoFullWhite.png\"\n : variant === \"favicon\"\n ? \"/favicon.ico\"\n : \"/image/logo.png\");\n\n const isClickable = clickable || !!onClick;\n\n if (iconOnly) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center\",\n iconSizes[size],\n isClickable && \"cursor-pointer\",\n className\n )}\n onClick={onClick}\n role={isClickable ? \"button\" : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={\n isClickable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n }\n : undefined\n }\n >\n <img\n src={logoSrc}\n alt={alt}\n className=\"object-contain w-full h-full\"\n onError={(e) => {\n // Fallback to favicon if image fails to load\n if (logoSrc !== \"/favicon.ico\") {\n (e.target as unknown as { src: string }).src = \"/favicon.ico\";\n }\n }}\n />\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex items-center\",\n sizes[size],\n isClickable && \"cursor-pointer\",\n className\n )}\n onClick={onClick}\n role={isClickable ? \"button\" : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={\n isClickable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n }\n : undefined\n }\n >\n {/* Logo Image */}\n <img\n src={logoSrc}\n alt={alt}\n className=\"object-contain w-auto h-full\"\n onError={(e) => {\n // Fallback to favicon if image fails to load\n if (logoSrc !== \"/favicon.ico\") {\n (e.target as unknown as { src: string }).src = \"/favicon.ico\";\n }\n }}\n />\n </div>\n );\n};\n\nexport type { LogoProps, LogoSize, LogoVariant } from \"./Logo.types\";\nexport { Logo };\n","import { ThemeConfig } from \"../types/theme\";\n\nexport const PROMED_THEME: ThemeConfig = {\n name: \"PROMED\",\n colors: {\n primary: \"#21596C\",\n secondary: \"#3BA1A1\",\n primaryHover: \"#1a4756\",\n secondaryHover: \"#308181\",\n primaryLight: \"#c0d0d4\",\n success: \"#059669\",\n successHover: \"#047857\",\n warning: \"#d97706\",\n warningHover: \"#b45309\",\n error: \"#dc2626\",\n errorHover: \"#b91c1c\",\n },\n};\n\nexport const MED_THEME: ThemeConfig = {\n name: \"MED\",\n colors: {\n primary: \"#3BA1A1\", // Teal for patients (calming, trustworthy)\n secondary: \"#6B73FF\", // Soft purple-blue (suggested secondary for MED)\n primaryHover: \"#308181\",\n secondaryHover: \"#5a61e6\",\n primaryLight: \"#a8d5d5\",\n success: \"#059669\",\n successHover: \"#047857\",\n warning: \"#d97706\",\n warningHover: \"#b45309\",\n error: \"#dc2626\",\n errorHover: \"#b91c1c\",\n },\n};\n\nexport const THEMES = {\n PROMED: PROMED_THEME,\n MED: MED_THEME,\n} as const;\n","import React, {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { Theme, ThemeContextType } from \"../types/theme\";\nimport { THEMES } from \"./themeConfig\";\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\ninterface ThemeProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n children,\n defaultTheme = \"PROMED\",\n}) => {\n const [theme, setTheme] = useState<Theme>(defaultTheme);\n const [themeConfig, setThemeConfig] = useState(THEMES[defaultTheme]);\n\n // Update theme config when theme changes\n useEffect(() => {\n setThemeConfig(THEMES[theme]);\n\n // Update data-theme attribute for CSS variable switching\n const root = document.documentElement;\n root.setAttribute(\"data-theme\", theme);\n\n // Also update CSS custom properties for backward compatibility\n const colors = THEMES[theme].colors;\n root.style.setProperty(\"--ews-primary\", colors.primary);\n root.style.setProperty(\"--ews-primary-hover\", colors.primaryHover);\n root.style.setProperty(\"--ews-primary-light\", colors.primaryLight);\n root.style.setProperty(\"--ews-secondary\", colors.secondary);\n root.style.setProperty(\"--ews-secondary-hover\", colors.secondaryHover);\n root.style.setProperty(\"--ews-success\", colors.success);\n root.style.setProperty(\"--ews-success-hover\", colors.successHover);\n root.style.setProperty(\"--ews-warning\", colors.warning);\n root.style.setProperty(\"--ews-warning-hover\", colors.warningHover);\n root.style.setProperty(\"--ews-error\", colors.error);\n root.style.setProperty(\"--ews-error-hover\", colors.errorHover);\n }, [theme]);\n\n const handleSetTheme = (newTheme: Theme) => {\n setTheme(newTheme);\n };\n\n const value: ThemeContextType = {\n theme,\n setTheme: handleSetTheme,\n themeConfig,\n };\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\n","import React from \"react\";\nimport { useTheme } from \"../../theme/ThemeProvider\";\nimport { Theme } from \"../../types/theme\";\n\nexport interface ThemeToggleProps {\n className?: string;\n}\n\nexport const ThemeToggle: React.FC<ThemeToggleProps> = ({ className }) => {\n const { theme, setTheme } = useTheme();\n\n const handleThemeChange = (newTheme: Theme) => {\n setTheme(newTheme);\n };\n\n return (\n <div className={`flex items-center space-x-2 ${className || \"\"}`}>\n <span className=\"text-sm font-medium text-gray-700\">Theme:</span>\n <div className=\"flex bg-gray-100 rounded-lg p-1\">\n <button\n onClick={() => handleThemeChange(\"PROMED\")}\n className={`px-3 py-1 text-xs font-medium rounded-md transition-colors ${\n theme === \"PROMED\"\n ? \"bg-ews-primary text-white\"\n : \"text-gray-600 hover:text-gray-900\"\n }`}\n >\n PROMED\n </button>\n <button\n onClick={() => handleThemeChange(\"MED\")}\n className={`px-3 py-1 text-xs font-medium rounded-md transition-colors ${\n theme === \"MED\"\n ? \"bg-ews-primary text-white\"\n : \"text-gray-600 hover:text-gray-900\"\n }`}\n >\n MED\n </button>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { useTheme } from \"../../theme/ThemeProvider\";\n\nexport interface ThemeDebuggerProps {\n className?: string;\n}\n\nexport const ThemeDebugger: React.FC<ThemeDebuggerProps> = ({\n className = \"\",\n}) => {\n const { theme, themeConfig, setTheme } = useTheme();\n\n const getComputedStyleValue = (property: string) => {\n if (typeof window !== \"undefined\") {\n return getComputedStyle(document.documentElement).getPropertyValue(\n property\n );\n }\n return \"N/A\";\n };\n\n return (\n <div className={`p-4 border rounded-lg bg-gray-50 ${className}`}>\n <h3 className=\"text-lg font-semibold mb-4\">Theme Debugger</h3>\n\n <div className=\"space-y-3\">\n <div>\n <strong>Current Theme:</strong> {theme}\n </div>\n\n <div>\n <strong>Theme Config:</strong>\n <pre className=\"text-xs bg-gray-100 p-2 rounded mt-1\">\n {JSON.stringify(themeConfig, null, 2)}\n </pre>\n </div>\n\n <div>\n <strong>CSS Variables:</strong>\n <div className=\"text-xs space-y-1 mt-1\">\n <div>--ews-primary: {getComputedStyleValue(\"--ews-primary\")}</div>\n <div>\n --ews-secondary: {getComputedStyleValue(\"--ews-secondary\")}\n </div>\n <div>\n --ews-primary-hover:{\" \"}\n {getComputedStyleValue(\"--ews-primary-hover\")}\n </div>\n <div>\n --ews-secondary-hover:{\" \"}\n {getComputedStyleValue(\"--ews-secondary-hover\")}\n </div>\n </div>\n </div>\n\n <div>\n <strong>Data Theme Attribute:</strong>{\" \"}\n {document.documentElement.getAttribute(\"data-theme\")}\n </div>\n\n <div className=\"flex space-x-2\">\n <button\n onClick={() => setTheme(\"PROMED\")}\n className={`px-3 py-1 text-xs rounded ${\n theme === \"PROMED\"\n ? \"bg-ews-primary text-white\"\n : \"bg-gray-200 text-gray-700\"\n }`}\n >\n PROMED\n </button>\n <button\n onClick={() => setTheme(\"MED\")}\n className={`px-3 py-1 text-xs rounded ${\n theme === \"MED\"\n ? \"bg-ews-primary text-white\"\n : \"bg-gray-200 text-gray-700\"\n }`}\n >\n MED\n </button>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2 mt-4\">\n <div className=\"bg-ews-primary text-white p-2 rounded text-center\">\n Primary\n </div>\n <div className=\"bg-ews-secondary text-white p-2 rounded text-center\">\n Secondary\n </div>\n <div className=\"bg-ews-success text-white p-2 rounded text-center\">\n Success\n </div>\n <div className=\"bg-ews-warning text-white p-2 rounded text-center\">\n Warning\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { Stethoscope } from \"lucide-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { MultiSearchAutocomplete } from \"../../components/MultiSearchAutocomplete\";\nimport { cn } from \"../../utils\";\n\nexport interface Specialty {\n id: string;\n code: string;\n label: string;\n [key: string]: string | number | boolean | undefined;\n}\n\nexport interface SpecialtySearchAutocompleteProps {\n selectedSpecialties: Specialty[];\n onSpecialtiesChange: (specialties: Specialty[]) => void;\n specialties: Specialty[];\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n maxSelections?: number;\n showSelectedCount?: boolean;\n title?: string;\n label?: string;\n getSelectedCountText?: (count: number) => React.ReactNode;\n}\n\nexport const SpecialtySearchAutocomplete: React.FC<\n SpecialtySearchAutocompleteProps\n> = ({\n selectedSpecialties = [],\n onSpecialtiesChange,\n specialties: availableSpecialties,\n placeholder = \"Search and select medical specialties...\",\n className = \"\",\n disabled = false,\n maxSelections,\n showSelectedCount = true,\n title = \"Medical Specialties\",\n label = \"Select Specialties\",\n getSelectedCountText,\n}) => {\n const [filteredSpecialties, setFilteredSpecialties] = useState<Specialty[]>(\n []\n );\n const [isLoading, setIsLoading] = useState(false);\n\n // Filter specialties based on search term\n const fetchSpecialties = useCallback(\n async (searchTerm: string) => {\n setIsLoading(true);\n try {\n // Filter based on search term\n const filtered = availableSpecialties.filter(\n (specialty) =>\n specialty.label.toLowerCase().includes(searchTerm.toLowerCase()) ||\n specialty.code.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n setFilteredSpecialties(filtered);\n } catch (error) {\n console.error(\"Error filtering specialties:\", error);\n setFilteredSpecialties([]);\n } finally {\n setIsLoading(false);\n }\n },\n [availableSpecialties]\n );\n\n // Initial load\n useEffect(() => {\n fetchSpecialties(\"\");\n }, [fetchSpecialties]);\n\n const handleSelectionChange = useCallback(\n (items: Specialty[]) => {\n // Check max selections limit\n if (maxSelections && items.length > maxSelections) {\n return; // Don't update if exceeding max selections\n }\n onSpecialtiesChange(items);\n },\n [onSpecialtiesChange, maxSelections]\n );\n\n const getEntityById = useCallback(\n async (id: string): Promise<Specialty | undefined> => {\n return availableSpecialties.find((specialty) => specialty.id === id);\n },\n [availableSpecialties]\n );\n\n return (\n <div className={cn(\"space-y-3\", className)}>\n {/* Header with title and icon */}\n <div className=\"flex items-center space-x-2\">\n <div className=\"flex justify-center items-center w-8 h-8 rounded-lg bg-secondary-100\">\n <Stethoscope className=\"w-4 h-4 text-secondary-600\" />\n </div>\n <h3 className=\"text-lg font-semibold text-gray-900\">\n {title || \"Medical Specialties\"}\n </h3>\n </div>\n\n {/* Label */}\n <div>\n <label className=\"block mb-2 text-sm font-medium text-gray-700\">\n {label || \"Select Specialties\"}\n </label>\n </div>\n\n {/* MultiSearchAutocomplete component */}\n <MultiSearchAutocomplete<Specialty>\n items={filteredSpecialties}\n selectedItems={selectedSpecialties}\n onSelectionChange={handleSelectionChange}\n onSearch={fetchSpecialties}\n getEntityById={getEntityById}\n getPrimaryText={(specialty) => specialty.label}\n getSecondaryText={(specialty) => specialty.code}\n placeholder={placeholder}\n disabled={disabled}\n loading={isLoading}\n multiple={true}\n keepOpenOnSelect={true}\n className=\"w-full\"\n renderSelectedItem={(specialty) => (\n <span className=\"inline-flex items-center px-3 py-1 text-sm font-medium rounded-full border bg-ews-primary/10 text-ews-primary border-ews-primary/20\">\n {specialty.label}\n </span>\n )}\n renderListItem={(specialty, isSelected) => (\n <div className=\"flex items-center space-x-3\">\n <div\n className={cn(\n \"flex justify-center items-center w-5 h-5 rounded border-2\",\n isSelected\n ? \"bg-ews-primary border-ews-primary\"\n : \"border-ews-gray-300\"\n )}\n >\n {isSelected && (\n <svg\n className=\"w-3 h-3 text-white\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )}\n </div>\n <span\n className={cn(\n \"font-medium\",\n isSelected ? \"text-ews-primary\" : \"text-gray-900\"\n )}\n >\n {specialty.label}\n </span>\n </div>\n )}\n />\n\n {/* Selected count display */}\n {showSelectedCount && selectedSpecialties.length > 0 && (\n <div className=\"flex justify-between items-center text-sm text-gray-600\">\n <span>\n {getSelectedCountText\n ? getSelectedCountText(selectedSpecialties.length)\n : `${selectedSpecialties.length} specialty${\n selectedSpecialties.length !== 1 ? \"ies\" : \"\"\n } selected`}\n </span>\n {maxSelections && (\n <span className=\"text-gray-400\">\n {selectedSpecialties.length}/{maxSelections}\n </span>\n )}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_jsxs","_jsx","Icon","__iconNode","AlertCircle","AlertTriangle","CheckCircle","_Fragment"],"mappings":";;;AAAA,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAQ,SAAS,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;;ACqB/W,MAAM,WAAW,GAAG;AAClB,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,KAAK,EAAE,IAAI;CACH;AAEV,SAAS,SAAS,CAAC,WAAwB,EAAA;AACzC,IAAA,IAAI,WAAW,KAAK,OAAO,EAAE;QAC3B,MAAM,IAAI,GAAG,cAAc;QAC3B,MAAM,MAAM,GAAG,sBAAsB;QACrC,OAAO;YACL,MAAM,EAAE,GAAG,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAA,EAAI,WAAW,CAAC,GAAG,CAAA,WAAA,CAAa;YAC7D,WAAW,EAAE,GAAG,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAA,EAAI,WAAW,CAAC,QAAQ,CAAA,iBAAA,CAAmB;YAC7E,MAAM,EAAE,GAAG,IAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAA,EAAI,WAAW,CAAC,GAAG,CAAA,CAAE;YAClD,QAAQ,EAAE,GAAG,IAAI,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA,EAAI,WAAW,CAAC,KAAK,CAAA,CAAE;YACxD,YAAY,EAAE,GAAG,IAAI,CAAA,WAAA,EAAc,MAAM,CAAA,CAAA,EAAI,WAAW,CAAC,SAAS,CAAA,CAAE;YACpE,QAAQ,EAAE,GAAG,IAAI,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA,EAAI,WAAW,CAAC,KAAK,CAAA,CAAE;SACzD;IACH;AAEA,IAAA,MAAM,MAAM,GAAG,WAAW,KAAK,MAAM,GAAG,EAAE,GAAG,CAAA,EAAG,WAAW,GAAG;IAC9D,MAAM,MAAM,GAAG,iBAAiB;IAEhC,OAAO;AACL,QAAA,MAAM,EAAE,CAAA,QAAA,EAAW,MAAM,CAAA,IAAA,EAAO,MAAM,CAAA,WAAA,CAAa;AACnD,QAAA,WAAW,EAAE,CAAA,QAAA,EAAW,MAAM,CAAA,IAAA,EAAO,MAAM,CAAA,iBAAA,CAAmB;AAC9D,QAAA,MAAM,EAAE,CAAA,QAAA,EAAW,MAAM,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE;AACxC,QAAA,QAAQ,EAAE,CAAA,QAAA,EAAW,MAAM,CAAA,MAAA,EAAS,MAAM,CAAA,CAAE;AAC5C,QAAA,YAAY,EAAE,CAAA,QAAA,EAAW,MAAM,CAAA,UAAA,EAAa,MAAM,CAAA,CAAE;AACpD,QAAA,QAAQ,EAAE,CAAA,QAAA,EAAW,MAAM,CAAA,MAAA,EAAS,MAAM,CAAA,CAAE;KAC7C;AACH;AAEA;;;;;;;;;;;AAWG;AACG,SAAU,eAAe,CAC7B,GAAW,EACX,SAA8B,EAAA;AAE9B,IAAA,MAAM,WAAW,IAAI,GAAG,IAAI,OAAO,CAAgB;AACnD,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC;IAEtC,OAAO;AACL,QAAA,GAAG,EAAE,WAAW;AAChB,QAAA,GAAG,OAAO;AACV,QAAA,GAAG,SAAS;KACb;AACH;;ACxEA;;AAEG;AACI,MAAM,QAAQ,GAAG,KAAK;AAE7B;;;;AAIG;AACG,SAAU,EAAE,CAAC,GAAG,MAAoB,EAAA;AACxC,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB;AAEA;;;;;AAKG;SACa,cAAc,CAAC,MAAc,EAAE,QAAQ,GAAG,QAAQ,EAAA;AAChE,IAAA,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AACpC,QAAA,KAAK,EAAE,UAAU;QACjB,QAAQ;AACT,KAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACnB;AAEA;;;;;AAKG;AACG,SAAU,UAAU,CACxB,IAA4B,EAC5B,OAAoC,EAAA;AAEpC,IAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AAC9B,IAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,OAAO;AACX,KAAA,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACpB;AAEA;;;;;AAKG;AACG,SAAU,QAAQ,CACtB,IAAO,EACP,IAAY,EAAA;AAEZ,IAAA,IAAI,OAAsC;AAC1C,IAAA,OAAO,CAAC,GAAG,IAAmB,KAAI;QAChC,YAAY,CAAC,OAAO,CAAC;AACrB,QAAA,OAAO,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC;AACjD,IAAA,CAAC;AACH;AAEA;;;;AAIG;AACG,SAAU,UAAU,CAAC,MAAM,GAAG,KAAK,EAAA;IACvC,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAC/D;AAEA;;;;AAIG;AACI,MAAM,aAAa,GAAG,CAAC,KAAa,KAAY;IACrD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACjC;AAEA;;;;;AAKG;AACG,SAAU,kBAAkB,CAAC,KAAa,EAAA;AAC9C,IAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE;;;IAGjC,MAAM,UAAU,GAAG,yBAAyB;AAC5C,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC;AAEA;;AAEG;IACS;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AACjB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AACjB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AACjB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AACjB,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,KAAmB;AACnB,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,KAAmB;AACnB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AACjB,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAVW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;AAYrB;;;AAGG;AACI,MAAM,WAAW,GAAgB;AACtC,IAAA,SAAS,CAAC,UAAU;AACpB,IAAA,SAAS,CAAC,UAAU;AACpB,IAAA,SAAS,CAAC,UAAU;AACpB,IAAA,SAAS,CAAC,UAAU;AACpB,IAAA,SAAS,CAAC,WAAW;AACrB,IAAA,SAAS,CAAC,WAAW;AACrB,IAAA,SAAS,CAAC,UAAU;AACpB,IAAA,SAAS,CAAC,UAAU;AACpB,IAAA,SAAS,CAAC,OAAO;;;AC9FnB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAC7B,CACE,EACE,SAAS,EACT,OAAO,GAAG,aAAa,EACvB,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,KAAK,EACf,SAAS,GAAG,KAAK,EACjB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EACD,GAAG,KACD;IACF,MAAM,UAAU,GACd,sJAAsJ;AAExJ,IAAA,MAAM,QAAQ,GAAG;AACf,QAAA,aAAa,EAAE,sDAAsD;AACrE,QAAA,eAAe,EACb,0DAA0D;AAC5D,QAAA,OAAO,EAAE,sDAAsD;AAC/D,QAAA,OAAO,EAAE,sDAAsD;AAC/D,QAAA,KAAK,EAAE,kDAAkD;AACzD,QAAA,OAAO,EACL,+EAA+E;AACjF,QAAA,KAAK,EACH,0LAA0L;KAC7L;AAED,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,EAAE,EAAE,qBAAqB;AACzB,QAAA,EAAE,EAAE,qBAAqB;AACzB,QAAA,EAAE,EAAE,mBAAmB;KACxB;AAED,IAAA,MAAM,SAAS,GAAG;AAChB,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,EAAE,EAAE,SAAS;KACd;AAED,IAAA,QACEA,IAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,UAAU,EACV,QAAQ,CAAC,OAAO,CAAC,EACjB,KAAK,CAAC,IAAI,CAAC,EACX,SAAS,IAAI,QAAQ,EACrB,SAAS,CACV,EACD,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,IAAI,OAAO,EAAA,GACzB,KAAK,EAAA,QAAA,EAAA,CAER,OAAO,KACNA,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,iCAAiC,EAC3C,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EAAA,QAAA,EAAA,CAEnBC,GAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,YAAY,EACtB,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,IAAI,EACP,CAAC,EAAC,IAAI,EACN,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EAAA,CACf,EACFA,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,YAAY,EACtB,IAAI,EAAC,cAAc,EACnB,CAAC,EAAC,iHAAiH,EAAA,CACnH,CAAA,EAAA,CACE,CACP,EACA,CAAC,OAAO,IAAI,QAAQ,KACnBA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAA,QAAA,EAC3D,QAAQ,EAAA,CACJ,CACR,EACA,QAAQ,EACR,CAAC,OAAO,IAAI,SAAS,KACpBA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,YAC3D,SAAS,EAAA,CACL,CACR,CAAA,EAAA,CACM;AAEb,CAAC;AAGH,MAAM,CAAC,WAAW,GAAG,QAAQ;;ACrI7B;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,WAAW,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE;AAC3F,MAAM,WAAW,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO;AAC9C,EAAE,uBAAuB;AACzB,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW;AAC3D,CAAC;AACD,MAAM,YAAY,GAAG,CAAC,MAAM,KAAK;AACjC,EAAE,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC;AACvC,EAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AACD,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK;AACjF,EAAE,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,KAAK;AAC5F,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACnB,MAAM,WAAW,GAAG,CAAC,KAAK,KAAK;AAC/B,EAAE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC5B,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;AACzE,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,EAAE;AACF,CAAC;;ACzBD;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,iBAAiB,GAAG;AACxB,EAAE,KAAK,EAAE,4BAA4B;AACrC,EAAE,KAAK,EAAE,EAAE;AACX,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,OAAO,EAAE,WAAW;AACtB,EAAE,IAAI,EAAE,MAAM;AACd,EAAE,MAAM,EAAE,cAAc;AACxB,EAAE,WAAW,EAAE,CAAC;AAChB,EAAE,aAAa,EAAE,OAAO;AACxB,EAAE,cAAc,EAAE;AAClB,CAAC;;ACjBD;AACA;AACA;AACA;AACA;AACA;;;AAMA,MAAMC,MAAI,GAAG,UAAU;AACvB,EAAE,CAAC;AACH,IAAI,KAAK,GAAG,cAAc;AAC1B,IAAI,IAAI,GAAG,EAAE;AACb,IAAI,WAAW,GAAG,CAAC;AACnB,IAAI,mBAAmB;AACvB,IAAI,SAAS,GAAG,EAAE;AAClB,IAAI,QAAQ;AACZ,IAAI,QAAQ;AACZ,IAAI,GAAG;AACP,GAAG,EAAE,GAAG,KAAK,aAAa;AAC1B,IAAI,KAAK;AACT,IAAI;AACJ,MAAM,GAAG;AACT,MAAM,GAAG,iBAAiB;AAC1B,MAAM,KAAK,EAAE,IAAI;AACjB,MAAM,MAAM,EAAE,IAAI;AAClB,MAAM,MAAM,EAAE,KAAK;AACnB,MAAM,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW;AAC9F,MAAM,SAAS,EAAE,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC;AAClD,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE;AACrE,MAAM,GAAG;AACT,KAAK;AACL,IAAI;AACJ,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClE,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ;AACvD;AACA;AACA,CAAC;;ACvCD;AACA;AACA;AACA;AACA;AACA;;;AAMA,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK;AACjD,EAAE,MAAM,SAAS,GAAG,UAAU;AAC9B,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,aAAa,CAACA,MAAI,EAAE;AAC1D,MAAM,GAAG;AACT,MAAM,QAAQ;AACd,MAAM,SAAS,EAAE,YAAY;AAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC5B,QAAQ;AACR,OAAO;AACP,MAAM,GAAG;AACT,KAAK;AACL,GAAG;AACH,EAAE,SAAS,CAAC,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC;AAChD,EAAE,OAAO,SAAS;AAClB,CAAC;;AC1BD;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMC,YAAU,GAAG;AACnB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,QAAQ,EAAE;AAChD,CAAC;AACI,MAAC,UAAU,GAAG,gBAAgB,CAAC,aAAa,EAAEA,YAAU;;ACb7D;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;AACjE,MAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAEA,YAAU;;ACVlD;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnE,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAEA,YAAU,CAAC;;ACVhE;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5D,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACpE,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE;AACvE,CAAC;AACD,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAEA,YAAU,CAAC;;ACdhE;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,iCAAiC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACnE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,QAAQ,EAAE;AACjD,CAAC;AACD,MAAM,cAAc,GAAG,gBAAgB,CAAC,kBAAkB,EAAEA,YAAU,CAAC;;ACbvE;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE;AACF,IAAI,MAAM;AACV,IAAI;AACJ,MAAM,CAAC,EAAE,gGAAgG;AACzG,MAAM,GAAG,EAAE;AACX;AACA,GAAG;AACH,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,sCAAsC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACxE,EAAE;AACF,IAAI,MAAM;AACV,IAAI;AACJ,MAAM,CAAC,EAAE,8FAA8F;AACvG,MAAM,GAAG,EAAE;AACX;AACA,GAAG;AACH,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC7C,CAAC;AACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,EAAEA,YAAU,CAAC;;AC3BtD;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE;AACF,IAAI,MAAM;AACV,IAAI;AACJ,MAAM,CAAC,EAAE,uGAAuG;AAChH,MAAM,GAAG,EAAE;AACX;AACA,GAAG;AACH,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC1D,CAAC;AACD,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAEA,YAAU,CAAC;;ACnB/C;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE;AACF,IAAI,MAAM;AACV,IAAI;AACJ,MAAM,CAAC,EAAE,uJAAuJ;AAChK,MAAM,GAAG,EAAE;AACX;AACA;AACA,CAAC;AACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAEA,YAAU,CAAC;;AClBnD;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE;AACF,IAAI,MAAM;AACV,IAAI;AACJ,MAAM,CAAC,EAAE,kIAAkI;AAC3I,MAAM,GAAG,EAAE;AACX;AACA,GAAG;AACH,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC5C,CAAC;AACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAEA,YAAU,CAAC;;ACnBrD;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACpD,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC1D,CAAC;AACI,MAAC,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAEA,YAAU;;ACbpD;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC1C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,0DAA0D,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5F,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,yBAAyB,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3D,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC1D,CAAC;AACD,MAAM,WAAW,GAAG,gBAAgB,CAAC,aAAa,EAAEA,YAAU,CAAC;;AChB/D;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,0CAA0C,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5E,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,wCAAwC,EAAE,GAAG,EAAE,QAAQ,EAAE;AACzE,CAAC;AACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAEA,YAAU,CAAC;;ACdnD;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE;AACF,IAAI,MAAM;AACV,IAAI;AACJ,MAAM,CAAC,EAAE,0EAA0E;AACnF,MAAM,GAAG,EAAE;AACX;AACA,GAAG;AACH,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC7C,CAAC;AACD,MAAM,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,EAAEA,YAAU,CAAC;;ACpBpE;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,2CAA2C,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC7E,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE;AACzD,CAAC;AACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAEA,YAAU,CAAC;;ACbjD;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAM,UAAU,GAAG;AACnB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC9C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE;AAC7C,CAAC;AACD,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC;;ACqB3C,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAC3B,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;AACjE,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,EAAE,EAAE,EAAE;AACN,QAAA,EAAE,EAAE,EAAE;AACN,QAAA,EAAE,EAAE,EAAE;AACN,QAAA,EAAE,EAAE,EAAE;KACP;AAED,IAAA,MAAM,QAAQ,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAE9D,IAAA,QACEF,GAAA,CAAC,aAAa,IACZ,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,SAAS,KAChB,KAAK,EAAA,CACT;AAEN,CAAC;AAGH,IAAI,CAAC,WAAW,GAAG,MAAM;;MCpDZ,UAAU,GAA8B,CAAC,EACpD,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,cAAc,EACtB,SAAS,GAAG,EAAE,EACd,GAAG,KAAK,EACT,KAAI;AACH,IAAA,QACEA,GAAA,CAAC,WAAW,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAM,KAAK,EAAA,CAAI;AAE9E;;MCTa,WAAW,GAA8B,CAAC,EACrD,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,cAAc,EACtB,SAAS,GAAG,EAAE,EACd,GAAG,KAAK,EACT,KAAI;AACH,IAAA,OAAOA,IAAC,KAAK,EAAA,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAA,GAAM,KAAK,GAAI;AAC7E;;MCPa,QAAQ,GAA8B,CAAC,EAClD,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,cAAc,EACtB,SAAS,GAAG,EAAE,EACd,GAAG,KAAK,EACT,KAAI;AACH,IAAA,OAAOA,IAAC,IAAI,EAAA,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAA,GAAM,KAAK,GAAI;AAC5E;;ACsEA,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAC5B,CACE,EACE,SAAS,EACT,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,KAAK,EACL,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,SAAS,GAAG,KAAK,EACjB,kBAAkB,GAAG,KAAK,EAC1B,QAAQ,GAAG,KAAK,EAChB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,EAAE,EACF,IAAI,GAAG,MAAM,EACb,GAAG,KAAK,EACT,EACD,GAAG,KACD;IACF,MAAM,OAAO,GAAG,EAAE,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;AACxE,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO;;IAGlD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACvD,IAAA,MAAM,eAAe,GAAG,IAAI,KAAK,UAAU;AAC3C,IAAA,MAAM,wBAAwB,GAAG,kBAAkB,IAAI,eAAe;AACtE,IAAA,MAAM,UAAU,GAAG,eAAe,IAAI,YAAY,GAAG,MAAM,GAAG,IAAI;;IAGlE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC3D,IAAA,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC;;IAGhD,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;YAC/C,IACE,WAAW,CAAC,OAAO;gBACnB,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EACnD;gBACA,iBAAiB,CAAC,KAAK,CAAC;YAC1B;AACF,QAAA,CAAC;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC;QAC1D,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAC5E,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,UAAU,GACd,+HAA+H;AAEjI,IAAA,MAAM,QAAQ,GAAG;AACf,QAAA,OAAO,EACL,qEAAqE;AACvE,QAAA,KAAK,EAAE,8DAA8D;AACrE,QAAA,OAAO,EACL,oEAAoE;KACvE;AAED,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,EAAE,EAAE,qBAAqB;AACzB,QAAA,EAAE,EAAE,qBAAqB;AACzB,QAAA,EAAE,EAAE,mBAAmB;KACxB;AAED,IAAA,MAAM,SAAS,GAAG;AAChB,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,EAAE,EAAE,SAAS;KACd;AAED,IAAA,MAAM,UAAU,GAAG,IAAI,KAAK,UAAU;;IAGtC,IAAI,UAAU,EAAE;QACd,IAAI,KAAK,EAAE;;AAET,YAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAA,QAAA,EAC9DD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,CACzCC,eACE,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,EAAE,CACX,QAAQ;AACR,4BAAA,SAAS,CACV,EACD,GAAG,EAAE,GAAG,EAAA,GACJ,KAAK,EAAA,CACT,EACFD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,QAAQ,aACrBA,IAAA,CAAA,OAAA,EAAA,EACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,4DAA4D,aAErE,KAAK,EACL,QAAQ,IAAIC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,qBAAqB,kBAAS,CAAA,EAAA,CACrD,EACP,CAAC,KAAK,IAAI,UAAU,MACnBA,GAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,cAAc,EACd,KAAK,GAAG,gBAAgB,GAAG,mBAAmB,CAC/C,YAEA,KAAK,IAAI,UAAU,EAAA,CAClB,CACL,CAAA,EAAA,CACG,CAAA,EAAA,CACF,EAAA,CACF;QAEV;aAAO;;YAEL,QACEA,GAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EACxB,GAAG,EAAE,GAAG,EAAA,GACJ,KAAK,EAAA,CACT;QAEN;IACF;;AAGA,IAAA,QACED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAA,QAAA,EAAA,CAC7D,KAAK,KACJA,IAAA,CAAA,OAAA,EAAA,EACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAAA,CAEtD,KAAK,EACL,QAAQ,IAAIC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,qBAAqB,kBAAS,CAAA,EAAA,CACrD,CACT,EACDD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CACtB,iBAAiB,KAChBC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uDAAuD,EAAC,GAAG,EAAE,WAAW,YACrFD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,aACvBA,IAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,iBAAiB,CAAC,CAAC,cAAc,CAAC,EACjD,SAAS,EAAE,EAAE,CACX,6DAA6D,EAC7D,uDAAuD,EACvD,4EAA4E,EAC5E,mCAAmC,CACpC,aAEDC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,aAAa,YAAE,iBAAiB,CAAC,KAAK,EAAA,CAAQ,EAC9DA,GAAA,CAAC,WAAW,EAAA,EACV,SAAS,EAAE,EAAE,CACX,gDAAgD,EAChD,cAAc,IAAI,YAAY,CAC/B,EAAA,CACD,IACK,EAER,cAAc,KACbA,aACE,SAAS,EAAE,EAAE,CACX,oEAAoE,EACpE,wCAAwC,CACzC,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAA,QAAA,EAE/C,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;wCACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,KAAK;AACxD,wCAAA,QACED,IAAA,CAAA,KAAA,EAAA,EAEE,OAAO,EAAE,MAAK;AACZ,gDAAA,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gDACrC,iBAAiB,CAAC,KAAK,CAAC;AAC1B,4CAAA,CAAC,EACD,SAAS,EAAE,EAAE,CACX,oDAAoD,EACpD,UAAU,IAAI,2BAA2B,EACzC,CAAC,UAAU,IAAI,sBAAsB,CACtC,EAAA,QAAA,EAAA,CAEDC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,aAAa,EAAA,QAAA,EAAE,IAAI,CAAC,IAAI,EAAA,CAAQ,EAC/C,IAAI,CAAC,OAAO,KACXA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,EAAE,CACjB,cAAc,EACd,UAAU,GAAG,eAAe,GAAG,mBAAmB,CACnD,EAAA,QAAA,EACE,IAAI,CAAC,OAAO,EAAA,CACR,CACR,CAAA,EAAA,EAnBI,IAAI,CAAC,IAAI,CAoBV;AAEV,oCAAA,CAAC,CAAC,EAAA,CACE,CACP,CAAA,EAAA,CACG,GACF,CACP,EACA,QAAQ,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,KAC3CA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sEAAsE,EAAA,QAAA,EACnFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAA,QAAA,EACtD,QAAQ,EAAA,CACJ,EAAA,CACH,CACP,EACA,SAAS,IAAI,CAAC,iBAAiB,IAAI,CAAC,QAAQ,KAC3CA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8FAA8F,EAAA,QAAA,EAC3GA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,mIAAmI,EAAA,QAAA,EAChJ,SAAS,GACL,EAAA,CACH,CACP,EACDA,GAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,EAAE,CACX,UAAU,EACV,QAAQ,CAAC,aAAa,CAAC,EACvB,KAAK,CAAC,IAAI,CAAC,EACX,iBAAiB,IAAI,OAAO,EAC5B,QAAQ,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,IAAI,OAAO,EACvD,SAAS,IAAI,CAAC,iBAAiB,IAAI,CAAC,QAAQ,IAAI,OAAO,EACvD,CAAC,SAAS,IAAI,wBAAwB,KAAK,OAAO,EAClD,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,wBAAwB,IAAI,OAAO,EAChE,SAAS,CACV,EACD,GAAG,EAAE,GAAG,EAAA,GACJ,KAAK,GACT,EACD,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,wBAAwB,KACpDA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uEAAuE,EAAA,QAAA,EACpFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACpD,UAAU,EAAA,CACN,GACH,CACP,EACA,SAAS,IAAI,CAAC,wBAAwB,KACrCA,aAAK,SAAS,EAAC,uEAAuE,EAAA,QAAA,EACpFA,cAAM,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAA,QAAA,EACtD,SAAS,GACL,EAAA,CACH,CACP,EACA,wBAAwB,KACvBA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mDAAmD,EAC7D,OAAO,EAAE,MAAM,eAAe,CAAC,CAAC,YAAY,CAAC,EAC7C,QAAQ,EAAE,EAAE,EAAA,QAAA,EAEZA,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,6DAA6D,EAC7D,SAAS,CAAC,IAAI,CAAC,CAChB,EAAA,QAAA,EAEA,YAAY,GAAGA,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAE,EAAE,GAAI,GAAGA,GAAA,CAAC,GAAG,EAAA,EAAC,IAAI,EAAE,EAAE,GAAI,EAAA,CACnD,EAAA,CACA,CACV,CAAA,EAAA,CACG,EACL,CAAC,KAAK,IAAI,UAAU,MACnBA,GAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,SAAS,EACT,KAAK,GAAG,gBAAgB,GAAG,mBAAmB,CAC/C,EAAA,QAAA,EAEA,KAAK,IAAI,UAAU,EAAA,CAClB,CACL,CAAA,EAAA,CACG;AAEV,CAAC;AAGH,KAAK,CAAC,WAAW,GAAG,OAAO;;ACpQ3B,MAAM,MAAM,GAAG,UAAU,CACvB,CACE,EACE,OAAO,GAAG,EAAE,EACZ,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,qBAAqB,EACnC,KAAK,EACL,UAAU,EACV,KAAK,EACL,OAAO,GAAG,KAAK,EACf,IAAI,GAAG,IAAI,EACX,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,KAAK,EAClB,QAAQ,EAAE,SAAS,GAAG,KAAK,EAC3B,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,GAAG,GAAG,EACf,SAAS,GAAG,KAAK,EACjB,YAAY,EACZ,WAAW,EACX,GAAG,KAAK,EACT,EACD,GAAG,KACD;AACF,IAAA,MAAM,WAAW,GAAG,KAAK,EAAE;AAC3B,IAAA,MAAM,QAAQ,GAAG,CAAA,OAAA,EAAU,WAAW,EAAE;AACxC,IAAA,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,CAAC,KAAK;IAEnC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC3C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAChD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IACpD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CACtD,QAAQ,CACT;AAED,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;AACjD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;AAC/C,IAAA,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC;AAChD,IAAA,MAAM,UAAU,GAAG,MAAM,CAA4B,EAAE,CAAC;;AAGxD,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;;IAGvE,MAAM,eAAe,GAAG;UACpB,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KACpB,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;UAE/D,OAAO;;AAGX,IAAA,MAAM,yBAAyB,GAAG,WAAW,CAAC,MAAK;QACjD,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;QAE3B,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE;AAClE,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;;AAGzC,QAAA,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,UAAU,GAAG,EAAE,GAAG,CAAC;AACxC,QAAA,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,SAAS,EACT,eAAe,CAAC,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,CAC/D;AAED,QAAA,MAAM,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC,MAAM;AACxD,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG;;QAGpC,MAAM,MAAM,GAAG,EAAE;AAEjB,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE;YACnC,UAAU;YACV,UAAU;YACV,cAAc;YACd,cAAc;YACd,eAAe,EAAE,aAAa,CAAC,MAAM;AACrC,YAAA,aAAa,EACX,UAAU,GAAG,cAAc,GAAG,MAAM;gBACpC,UAAU,GAAG,cAAc,GAAG,MAAM;AACvC,SAAA,CAAC;;AAGF,QAAA,IACE,UAAU,GAAG,cAAc,GAAG,MAAM;AACpC,YAAA,UAAU,GAAG,cAAc,GAAG,MAAM,EACpC;YACA,mBAAmB,CAAC,KAAK,CAAC;QAC5B;aAAO;YACL,mBAAmB,CAAC,QAAQ,CAAC;QAC/B;IACF,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;;IAGnD,MAAM,oCAAoC,GAAG,MAAK;QAChD,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE;QAEnD,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE;QAClE,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,qBAAqB,EAAE;AAChE,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;AAEzC,QAAA,MAAM,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC,MAAM;AACxD,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG;AACpC,QAAA,MAAM,oBAAoB,GAAG,YAAY,CAAC,MAAM;AAEhD,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE;YAChD,UAAU;YACV,UAAU;YACV,oBAAoB;YACpB,cAAc;YACd,eAAe,EAAE,aAAa,CAAC,MAAM;AACtC,SAAA,CAAC;;QAGF,IACE,UAAU,GAAG,oBAAoB;YACjC,UAAU,GAAG,oBAAoB,EACjC;YACA,mBAAmB,CAAC,KAAK,CAAC;QAC5B;aAAO;YACL,mBAAmB,CAAC,QAAQ,CAAC;QAC/B;AACF,IAAA,CAAC;;IAGD,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;YAC/C,IACE,YAAY,CAAC,OAAO;gBACpB,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EACpD;gBACA,SAAS,CAAC,KAAK,CAAC;gBAChB,aAAa,CAAC,EAAE,CAAC;AACjB,gBAAA,eAAe,CAAC,EAAE,CAAC;YACrB;AACF,QAAA,CAAC;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC;QAC1D,OAAO,MACL,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACjE,CAAC,EAAE,EAAE,CAAC;;IAGN,SAAS,CAAC,MAAK;QACb,IAAI,MAAM,EAAE;;AAEV,YAAA,yBAAyB,EAAE;;YAG3B,qBAAqB,CAAC,MAAK;AACzB,gBAAA,oCAAoC,EAAE;AACxC,YAAA,CAAC,CAAC;QACJ;AACF,IAAA,CAAC,EAAE;QACD,MAAM;AACN,QAAA,eAAe,CAAC,MAAM;QACtB,UAAU;QACV,SAAS;QACT,yBAAyB;AAC1B,KAAA,CAAC;;IAGF,SAAS,CAAC,MAAK;QACb,MAAM,YAAY,GAAG,MAAK;YACxB,IAAI,MAAM,EAAE;AACV,gBAAA,yBAAyB,EAAE;YAC7B;AACF,QAAA,CAAC;AAED,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;AAC/C,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;AAE/C,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC;AAClD,YAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC;AACpD,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;;AAGvC,IAAA,MAAM,aAAa,GAAG,CAAC,KAA0B,KAAI;AACnD,QAAA,IAAI,QAAQ;YAAE;AAEd,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,MAAM,EAAE;oBACX,SAAS,CAAC,IAAI,CAAC;gBACjB;qBAAO;oBACL,eAAe,CAAC,CAAC,IAAI,KACnB,IAAI,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CACjD;gBACH;gBACA;AACF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,MAAM,EAAE;oBACX,SAAS,CAAC,IAAI,CAAC;gBACjB;qBAAO;oBACL,eAAe,CAAC,CAAC,IAAI,KACnB,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CACjD;gBACH;gBACA;AACF,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IACE,MAAM;AACN,oBAAA,YAAY,IAAI,CAAC;AACjB,oBAAA,YAAY,GAAG,eAAe,CAAC,MAAM,EACrC;AACA,oBAAA,YAAY,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;gBAC7C;qBAAO,IAAI,CAAC,MAAM,EAAE;oBAClB,SAAS,CAAC,IAAI,CAAC;gBACjB;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,SAAS,CAAC,KAAK,CAAC;gBAChB,aAAa,CAAC,EAAE,CAAC;AACjB,gBAAA,eAAe,CAAC,EAAE,CAAC;gBACnB;AACF,YAAA,KAAK,KAAK;gBACR,SAAS,CAAC,KAAK,CAAC;gBAChB,aAAa,CAAC,EAAE,CAAC;AACjB,gBAAA,eAAe,CAAC,EAAE,CAAC;gBACnB;;AAEN,IAAA,CAAC;;AAGD,IAAA,MAAM,YAAY,GAAG,CAAC,MAAoB,KAAI;QAC5C,IAAI,MAAM,CAAC,QAAQ;YAAE;QAErB,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;QAChC,SAAS,CAAC,KAAK,CAAC;QAChB,aAAa,CAAC,EAAE,CAAC;AACjB,QAAA,eAAe,CAAC,EAAE,CAAC;AACrB,IAAA,CAAC;;AAGD,IAAA,MAAM,WAAW,GAAG,CAAC,KAAuB,KAAI;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,QAAQ,GAAG,SAAoB,EAAE,EAAkB,CAAC;AACtD,IAAA,CAAC;;IAGD,MAAM,YAAY,GAAG,MAAK;AACxB,QAAA,IAAI,QAAQ;YAAE;AACd,QAAA,SAAS,CAAC,CAAC,MAAM,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE;AACzB,YAAA,UAAU,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAChD;AACF,IAAA,CAAC;;IAGD,SAAS,CAAC,MAAK;QACb,IAAI,YAAY,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACzD,YAAA,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;AAC/C,gBAAA,KAAK,EAAE,SAAS;AACjB,aAAA,CAAC;QACJ;AACF,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAElB,IAAA,MAAM,WAAW,GAAG;AAClB,QAAA,EAAE,EAAE,qBAAqB;AACzB,QAAA,EAAE,EAAE,mBAAmB;AACvB,QAAA,EAAE,EAAE,uBAAuB;KAC5B;AAED,IAAA,MAAM,eAAe,GAAG;AACtB,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,EAAE,EAAE,SAAS;KACd;IAED,QACED,cAAK,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,GAAG,EAAE,YAAY,EAAA,QAAA,EAAA,CAChE,KAAK,KACJA,IAAA,CAAA,OAAA,EAAA,EACE,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,EAAE,CACX,gCAAgC,EAChC,mBAAmB,EACnB,QAAQ,IAAI,mBAAmB,CAChC,EAAA,QAAA,EAAA,CAEA,KAAK,EACL,QAAQ,IAAIC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAAA,GAAA,EAAA,CAAS,CAAA,EAAA,CACrD,CACT,EAEDD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,aAEvBC,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAsC,EAC3C,IAAI,EAAC,UAAU,EAAA,eAAA,EACA,MAAM,EAAA,eAAA,EACP,SAAS,qBACN,KAAK,GAAG,QAAQ,GAAG,SAAS,EAC7C,QAAQ,EAAE,QAAQ,GAAG,EAAE,GAAG,CAAC,EAC3B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,EAAE;;wBAEX,iGAAiG,EACjG,qDAAqD,EACrD,yEAAyE;;wBAGzE,WAAW,CAAC,IAAI,CAAC;;wBAGjB;AACE,8BAAE;AACF,8BAAE,wEAAwE;;AAG5E,wBAAA,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,2BAA2B;;wBAGrD,mBAAmB;;AAGnB,wBAAA,OAAO,EAEP,eAAe,CAChB,EAAA,GACG,KAAK,YAETD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,aAChDC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,YAC5B,cAAc,IACb,WAAW,IACT,WAAW,CAAC,cAAc,CAAC,KAE3BA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,UAAU,EAAA,QAAA,EAAE,cAAc,CAAC,KAAK,EAAA,CAAQ,CACzD,KAEDA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAE,WAAW,GAAQ,CACzD,EAAA,CACG,EAEND,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,CAC9C,SAAS,IAAI,cAAc,IAAI,CAAC,QAAQ,KACvCC,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAE7CA,GAAA,CAAC,CAAC,EAAA,EACA,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,EAAA,CACzD,EAAA,CACK,CACV,EACDA,GAAA,CAAC,WAAW,EAAA,EACV,SAAS,EAAE,EAAE,CACX,eAAe,CAAC,IAAI,CAAC,EACrB,QAAQ,GAAG,gBAAgB,GAAG,mBAAmB,EACjD,QAAQ,IAAI,mBAAmB,EAC/B,MAAM,IAAI,iCAAiC,CAC5C,EAAA,CACD,CAAA,EAAA,CACE,IACF,EAAA,CACF,EAGL,MAAM,KACLD,IAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,WAAW,EAChB,IAAI,EAAC,SAAS,EACd,SAAS,EAAE,EAAE,CACX,+EAA+E,EAC/E,oBAAoB,EACpB,gBAAgB,KAAK;AACnB,8BAAE;AACF,8BAAE,eAAe,EACnB,iBAAiB,CAClB,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI,EAAE,EAAA,QAAA,EAAA,CAGrC,UAAU,KACTC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kCAAkC,YAC/CD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,aACvBC,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,8EAA8E,EAAA,CAAG,EACnGA,GAAA,CAAC,KAAK,EAAA,EACJ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9C,WAAW,EAAC,mBAAmB,EAC/B,QAAQ,EACNA,GAAA,CAAC,MAAM,EAAA,EAAC,SAAS,EAAC,2BAA2B,EAAA,CAAG,GAElD,CAAA,EAAA,CACE,EAAA,CACF,CACP,EAGDA,aACE,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,SAAS,IAAI,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA,EAAA,CAAI,EAAE,EAAA,QAAA,EAE7D,eAAe,CAAC,MAAM,KAAK,CAAC,IAC3BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qCAAqC,EAAA,QAAA,EACjD,UAAU,GAAG,kBAAkB,GAAG,sBAAsB,EAAA,CACrD,KAEN,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACpC,oCAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,KAAK,KAAK;AACzC,oCAAA,MAAM,SAAS,GAAG,KAAK,KAAK,YAAY;oCAExC,QACEA,aAEE,GAAG,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAC7C,IAAI,EAAC,QAAQ,EAAA,eAAA,EACE,UAAU,EACzB,OAAO,EAAE,MAAM,YAAY,CAAC,MAAM,CAAC,EACnC,SAAS,EAAE,EAAE,CACX,oDAAoD,EACpD,UAAU,IAAI,2BAA2B,EACzC,CAAC,UAAU,IAAI,SAAS,IAAI,iBAAiB,EAC7C,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,sBAAsB,EACnD,MAAM,CAAC,QAAQ,IAAI,+BAA+B,CACnD,YAEA,YAAY,IACX,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,KAEhCA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,UAAU,YAAE,MAAM,CAAC,KAAK,EAAA,CAAQ,CACjD,EAAA,EAjBI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA,CAAE,CAkBnC;gCAEV,CAAC,CAAC,CACH,EAAA,CACG,CAAA,EAAA,CACF,CACP,CAAA,EAAA,CACG,EAGL,CAAC,UAAU,IAAI,KAAK,MACnBA,aAAK,SAAS,EAAC,MAAM,EAAA,QAAA,EAClB,KAAK,IACJA,WAAG,SAAS,EAAC,wBAAwB,EAAA,QAAA,EAAE,KAAK,GAAK,KAEjDA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,2BAA2B,YAAE,UAAU,EAAA,CAAK,CAC1D,EAAA,CACG,CACP,CAAA,EAAA,CACG;AAEV,CAAC;AAGH,MAAM,CAAC,WAAW,GAAG,QAAQ;;ACpjB7B,MAAM,aAAa,GAAG,GAAG;AAEzB;;;;;AAKG;AACG,SAAU,WAAW,CAAI,KAAQ,EAAE,KAAc,EAAA;IACrD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAI,KAAK,CAAC;AAC9D,IAAA,MAAM,WAAW,GAAG,KAAK,IAAI,aAAa;IAE1C,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;YAC9B,iBAAiB,CAAC,KAAK,CAAC;QAC1B,CAAC,EAAE,WAAW,CAAC;AAEf,QAAA,OAAO,MAAK;YACV,YAAY,CAAC,OAAO,CAAC;AACvB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAExB,IAAA,OAAO,cAAc;AACvB;AAEA;;;;;AAKG;AACG,SAAU,oBAAoB,CAClC,QAAW,EACX,KAAc,EAAA;IAEd,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAExC,IAAI,CAAC;AAEf,IAAA,MAAM,iBAAiB,IAAI,CAAC,GAAG,IAAmB,KAAI;QACpD,IAAI,aAAa,EAAE;YACjB,YAAY,CAAC,aAAa,CAAC;QAC7B;AAEA,QAAA,MAAM,WAAW,GAAG,KAAK,IAAI,aAAa;AAC1C,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAK;AAC/B,YAAA,QAAQ,CAAC,GAAG,IAAI,CAAC;QACnB,CAAC,EAAE,WAAW,CAAC;QAEf,gBAAgB,CAAC,QAAQ,CAAC;AAC5B,IAAA,CAAC,CAAM;IAEP,SAAS,CAAC,MAAK;AACb,QAAA,OAAO,MAAK;YACV,IAAI,aAAa,EAAE;gBACjB,YAAY,CAAC,aAAa,CAAC;YAC7B;AACF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AAEnB,IAAA,OAAO,iBAAiB;AAC1B;;AC7DA,IAAI,eAAe,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,UAAU;;AAE9D,IAAI,YAAY,GAAG,CAAC,KAAK,KAAK,KAAK,YAAY,IAAI;;AAEnD,IAAI,iBAAiB,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI;;AAEhD,MAAM,YAAY,GAAG,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ;AACzD,IAAI,QAAQ,GAAG,CAAC,KAAK,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACzB,IAAI,YAAY,CAAC,KAAK,CAAC;AACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAExB,IAAI,aAAa,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AACxD,MAAM,eAAe,CAAC,KAAK,CAAC,MAAM;AAClC,UAAU,KAAK,CAAC,MAAM,CAAC;AACvB,UAAU,KAAK,CAAC,MAAM,CAAC;AACvB,MAAM,KAAK;;AAEX,IAAI,iBAAiB,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI;;AAEvF,IAAI,kBAAkB,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;AAE5E,IAAI,aAAa,GAAG,CAAC,UAAU,KAAK;AACpC,IAAI,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,SAAS;AACpF,IAAI,QAAQ,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,cAAc,CAAC,eAAe,CAAC;AACpF,CAAC;;AAED,IAAI,KAAK,GAAG,OAAO,MAAM,KAAK,WAAW;AACzC,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,WAAW;AAC7C,IAAI,OAAO,QAAQ,KAAK,WAAW;;AAEnC,SAAS,WAAW,CAAC,IAAI,EAAE;AAC3B,IAAI,IAAI,IAAI;AACZ,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACvC,IAAI,MAAM,kBAAkB,GAAG,OAAO,QAAQ,KAAK,WAAW,GAAG,IAAI,YAAY,QAAQ,GAAG,KAAK;AACjG,IAAI,IAAI,IAAI,YAAY,IAAI,EAAE;AAC9B,QAAQ,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AAC7B,IAAI;AACJ,SAAS,IAAI,EAAE,KAAK,KAAK,IAAI,YAAY,IAAI,IAAI,kBAAkB,CAAC,CAAC;AACrE,SAAS,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;AACrC,QAAQ,IAAI,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACxE,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC9C,YAAY,IAAI,GAAG,IAAI;AACvB,QAAQ;AACR,aAAa;AACb,YAAY,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACpC,gBAAgB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AAC9C,oBAAoB,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,SAAS;AACT,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;;AAEA,IAAI,KAAK,GAAG,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;AAE1C,IAAI,WAAW,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,SAAS;;AAE5C,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;;AAE1E,IAAI,YAAY,GAAG,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;AAEpF,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK;AAC1C,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpC,QAAQ,OAAO,YAAY;AAC3B,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,iBAAiB,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;AAChJ,IAAI,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK;AAC7C,UAAU,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC,cAAc;AACd,cAAc,MAAM,CAAC,IAAI;AACzB,UAAU,MAAM;AAChB,CAAC;;AAED,IAAI,SAAS,GAAG,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,SAAS;;AAErD,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,KAAK;AACnC,IAAI,IAAI,KAAK,GAAG,EAAE;AAClB,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC;AAC9D,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;AAClC,IAAI,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC;AAChC,IAAI,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;AAC7B,QAAQ,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnC,QAAQ,IAAI,QAAQ,GAAG,KAAK;AAC5B,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;AACjC,YAAY,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;AACxC,YAAY,QAAQ;AACpB,gBAAgB,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ;AAC5D,sBAAsB;AACtB,sBAAsB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AACjD,0BAA0B;AAC1B,0BAA0B,EAAE;AAC5B,QAAQ;AACR,QAAQ,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,WAAW,EAAE;AACjF,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ;AAC9B,QAAQ,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AAC5B,IAAI;AACJ,CAAC;;AAED,MAAM,MAAM,GAAG;AACf,IAAI,IAAI,EAAE,MAAM;AAChB,IACI,MAAM,EAAE,QAAQ;AACpB,CAAC;AACD,MAAM,eAAe,GAAG;AACxB,IAII,GAAG,EAAE,KAAK;AACd,CAAC;;AAWD,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;AACjD,eAAe,CAAC,WAAW,GAAG,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;;AAoC9D,IAAI,iBAAiB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,GAAG,IAAI,KAAK;AACpF,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,aAAa,EAAE,OAAO,CAAC,cAAc;AAC7C,KAAK;AACL,IAAI,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AACjC,QAAQ,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;AAC3C,YAAY,GAAG,EAAE,MAAM;AACvB,gBAAgB,MAAM,IAAI,GAAG,GAAG;AAChC,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,eAAe,CAAC,GAAG,EAAE;AAC3E,oBAAoB,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,eAAe,CAAC,GAAG;AAClF,gBAAgB;AAChB,gBAAgB,mBAAmB,KAAK,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACzE,gBAAgB,OAAO,SAAS,CAAC,IAAI,CAAC;AACtC,YAAY,CAAC;AACb,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,MAAM;AACjB,CAAC;;AAED,MAAM,yBAAyB,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS;;AAEzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;AAC7B,IAAI,MAAM,OAAO,GAAG,cAAc,EAAE;AACpC,IAAI,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE;AAC5E,IAAI,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;AAC3E,IAAI,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAAC;AAC9C,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,SAAS,EAAE,KAAK;AACxB,QAAQ,WAAW,EAAE,KAAK;AAC1B,QAAQ,aAAa,EAAE,KAAK;AAC5B,QAAQ,gBAAgB,EAAE,KAAK;AAC/B,QAAQ,YAAY,EAAE,KAAK;AAC3B,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,MAAM,EAAE,KAAK;AACrB,KAAK,CAAC;AACN,IAAI,yBAAyB,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC;AACvD,QAAQ,IAAI;AACZ,QAAQ,SAAS,EAAE,oBAAoB,CAAC,OAAO;AAC/C,QAAQ,KAAK;AACb,QAAQ,QAAQ,EAAE,CAAC,SAAS,KAAK;AACjC,YAAY,CAAC,QAAQ;AACrB,gBAAgB,eAAe,CAAC;AAChC,oBAAoB,GAAG,OAAO,CAAC,UAAU;AACzC,oBAAoB,GAAG,SAAS;AAChC,iBAAiB,CAAC;AAClB,QAAQ,CAAC;AACT,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAChC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM;AAC1B,QAAQ,oBAAoB,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AACvE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACjB,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChI;;AAEA,IAAI,QAAQ,GAAG,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ;;AAEnD,IAAI,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,KAAK;AACjF,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AAEzB,QAAQ,OAAO,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC;AACnD,IAAI;AACJ,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC9B,QAAQ,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,MACvB,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AACxC,IAAI;AAEJ,IAAI,OAAO,UAAU;AACrB,CAAC;;AAED,IAAI,WAAW,GAAG,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAE7E,SAAS,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,OAAO,EAAE,EAAE;AACxE,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE;AACtD,QAAQ,OAAO,OAAO,KAAK,OAAO;AAClC,IAAI;AACJ,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE;AACxD,QAAQ,OAAO,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE;AACtD,IAAI;AACJ,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AACvC,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC1E,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AAClC,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AAClC,IAAI,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AAC7B,QAAQ,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;AACjC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAClC,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,IAAI,GAAG,KAAK,KAAK,EAAE;AAC3B,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;AACrC,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC;AACzD,iBAAiB,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClD,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAC3D,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAiB;AAC1D,kBAAkB,IAAI,KAAK,IAAI,EAAE;AACjC,gBAAgB,OAAO,KAAK;AAC5B,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,IAAI,MAAM,OAAO,GAAG,cAAc,EAAE;AACpC,IAAI,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,KAAK,IAAI,EAAE;AACpG,IAAI,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;AACpD,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1C,IAAI,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;AACtD,IAAI,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9C,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACxC,IAAI,QAAQ,CAAC,OAAO,GAAG,OAAO;AAC9B,IAAI,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM;AACtD,QAAQ,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC;AAC3E,QAAQ,OAAO,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY;AAC/E,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK;AAC3D,QAAQ,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;AACjI,QAAQ,OAAO,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU;AAC3E,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACnD,IAAI,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK;AACvD,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;AACrI,YAAY,IAAI,QAAQ,CAAC,OAAO,EAAE;AAClC,gBAAgB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;AACvE,gBAAgB,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE;AAChF,oBAAoB,WAAW,CAAC,kBAAkB,CAAC;AACnD,oBAAoB,kBAAkB,CAAC,OAAO,GAAG,kBAAkB;AACnE,gBAAgB;AAChB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,WAAW,CAAC,UAAU,CAAC;AACvC,YAAY;AACZ,QAAQ;AACR,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7D,IAAI,yBAAyB,CAAC,MAAM;AACpC,QAAQ,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO;AAC5C,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AACjD,YAAY,YAAY,CAAC,OAAO,GAAG,OAAO;AAC1C,YAAY,SAAS,CAAC,OAAO,GAAG,IAAI;AACpC,YAAY,YAAY,EAAE;AAC1B,QAAQ;AACR,QAAQ,OAAO,OAAO,CAAC,UAAU,CAAC;AAClC,YAAY,IAAI;AAChB,YAAY,SAAS,EAAE;AACvB,gBAAgB,MAAM,EAAE,IAAI;AAC5B,aAAa;AACb,YAAY,KAAK;AACjB,YAAY,QAAQ,EAAE,CAAC,SAAS,KAAK;AACrC,gBAAgB,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;AAC9C,YAAY,CAAC;AACb,SAAS,CAAC;AACV,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAC5C,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;AACrD;AACA;AACA;AACA;AACA,IAAI,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,KAAK,OAAO;AAC3D,IAAI,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO;AACtC;AACA;AACA,IAAI,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;AAC/C,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,MAAM,WAAW,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC;AACzE,QAAQ,MAAM,qBAAqB,GAAG,cAAc,IAAI,WAAW;AACnE,QAAQ,OAAO,qBAAqB,GAAG,gBAAgB,EAAE,GAAG,IAAI;AAChE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACpE,IAAI,OAAO,cAAc,KAAK,IAAI,GAAG,cAAc,GAAG,KAAK;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,IAAI,MAAM,OAAO,GAAG,cAAc,EAAE;AACpC,IAAI,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,GAAG,GAAG,KAAK;AAChG,IAAI,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;AACvE,IAAI,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAChK,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC;AAC3B,QAAQ,OAAO;AACf,QAAQ,IAAI;AACZ,QAAQ,YAAY,EAAE,gBAAgB;AACtC,QAAQ,KAAK,EAAE,IAAI;AACnB,KAAK,CAAC;AACN,IAAI,MAAM,SAAS,GAAG,YAAY,CAAC;AACnC,QAAQ,OAAO;AACf,QAAQ,IAAI;AACZ,QAAQ,KAAK,EAAE,IAAI;AACnB,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AACtC,IAAI,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;AACpD,IAAI,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC/D,QAAQ,GAAG,KAAK,CAAC,KAAK;AACtB,QAAQ,KAAK;AACb,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC1E,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC,OAAO,GAAG,KAAK;AAC1B,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE;AACvE,QAAQ,OAAO,EAAE;AACjB,YAAY,UAAU,EAAE,IAAI;AAC5B,YAAY,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;AACpD,SAAS;AACT,QAAQ,OAAO,EAAE;AACjB,YAAY,UAAU,EAAE,IAAI;AAC5B,YAAY,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC;AACzD,SAAS;AACT,QAAQ,SAAS,EAAE;AACnB,YAAY,UAAU,EAAE,IAAI;AAC5B,YAAY,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC;AAC3D,SAAS;AACT,QAAQ,YAAY,EAAE;AACtB,YAAY,UAAU,EAAE,IAAI;AAC5B,YAAY,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC;AAC9D,SAAS;AACT,QAAQ,KAAK,EAAE;AACf,YAAY,UAAU,EAAE,IAAI;AAC5B,YAAY,GAAG,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;AAClD,SAAS;AACT,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC1B,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;AAClF,QAAQ,MAAM,EAAE;AAChB,YAAY,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;AACvC,YAAY,IAAI,EAAE,IAAI;AACtB,SAAS;AACT,QAAQ,IAAI,EAAE,MAAM,CAAC,MAAM;AAC3B,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACf,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AACzE,QAAQ,MAAM,EAAE;AAChB,YAAY,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;AACjD,YAAY,IAAI,EAAE,IAAI;AACtB,SAAS;AACT,QAAQ,IAAI,EAAE,MAAM,CAAC,IAAI;AACzB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;AACpC,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK;AAC3C,QAAQ,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;AAChD,QAAQ,IAAI,KAAK,IAAI,GAAG,EAAE;AAC1B,YAAY,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG;AAC3B,gBAAgB,KAAK,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE;AACrD,gBAAgB,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;AACxD,gBAAgB,iBAAiB,EAAE,CAAC,OAAO,KAAK,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC;AAC9E,gBAAgB,cAAc,EAAE,MAAM,GAAG,CAAC,cAAc,EAAE;AAC1D,aAAa;AACb,QAAQ;AACR,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/B,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO;AACvC,QAAQ,IAAI;AACZ,QAAQ,KAAK;AACb,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;AAC7C,cAAc,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,QAAQ;AACxD,cAAc,EAAE,CAAC;AACjB,QAAQ,QAAQ;AAChB,QAAQ,MAAM;AACd,QAAQ,GAAG;AACX,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC3E,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM;AAC1B,QAAQ,MAAM,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,IAAI,gBAAgB;AAC5F,QAAQ,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO;AACrD,QAAQ,IAAI,YAAY,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;AACpE,YAAY,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;AAC5C,QAAQ;AACR,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC/B,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK;AACnC,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ;AACjD,kBAAkB,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;AACrD,kBAAkB,EAAE,CAAC;AACrB,SAAS,CAAC;AACV,QAAQ,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,KAAK,KAAK;AAC/C,YAAY,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;AACpD,YAAY,IAAI,KAAK,IAAI,KAAK,CAAC,EAAE,EAAE;AACnC,gBAAgB,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK;AACtC,YAAY;AACZ,QAAQ,CAAC;AACT,QAAQ,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;AACjC,QAAQ,IAAI,sBAAsB,EAAE;AACpC,YAAY,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC7G,YAAY,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC;AACpD,YAAY,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE;AAC7D,gBAAgB,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC;AACrD,YAAY;AACZ,QAAQ;AACR,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC/C,QAAQ,gBAAgB,CAAC,OAAO,GAAG,IAAI;AACvC,QAAQ,OAAO,MAAM;AACrB,YAAY,CAAC;AACb,kBAAkB,sBAAsB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5D,kBAAkB,sBAAsB;AACxC,kBAAkB,OAAO,CAAC,UAAU,CAAC,IAAI;AACzC,kBAAkB,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;AAC5C,QAAQ,CAAC;AACT,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;AACvD,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM;AAC1B,QAAQ,OAAO,CAAC,iBAAiB,CAAC;AAClC,YAAY,QAAQ;AACpB,YAAY,IAAI;AAChB,SAAS,CAAC;AACV,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO;AAChC,QAAQ,KAAK;AACb,QAAQ,SAAS;AACjB,QAAQ,UAAU;AAClB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;;AC/kB1D,SAAU,cAAc,CAG5B,EACA,IAAI,EACJ,OAAO,EACP,OAAO,EAAE,QAAQ,EACjB,KAAK,EACL,YAAY,GAC6B,EAAA;AACzC,IAAA,MAAM,EACJ,KAAK,EACL,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAC/B,GAAG,aAAa,CAAC;QAChB,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;AACb,KAAA,CAAC;AAEF,IAAA,MAAM,WAAW,GAAiC;QAChD,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1C,QAAA,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,KAAK,EAAE,OAAO;KACtB;IAED,OAAO;QACL,WAAW;QACX,KAAK;QACL,KAAK;QACL,OAAO;KACR;AACH;;AC/BM,SAAU,kBAAkB,CAA6B,EAC7D,QAAQ,EACR,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,IAAI,GAAG,MAAM,EACb,QAAQ,GAAG,KAAK,EAChB,eAAe,GAAG,CAAC,EACnB,YAAY,GAAG,GAAG,EAClB,KAAK,GACsB,EAAA;IAC3B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAChD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAM,EAAE,CAAC;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACvD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAW,IAAI,CAAC;IACpE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;AAEnE,IAAA,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC;IAChD,MAAM,mBAAmB,GAAG,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC;;AAGjE,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;;IAGlC,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,mBAAmB,GAAG,YAAW;;AAErC,YAAA,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,IAAI,eAAe;gBAAE;YAEtD,YAAY,CAAC,IAAI,CAAC;AAClB,YAAA,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC;gBAC9C,IAAI,MAAM,EAAE;oBACV,iBAAiB,CAAC,MAAM,CAAC;AACzB,oBAAA,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACxC;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;YACzD;oBAAU;gBACR,YAAY,CAAC,KAAK,CAAC;gBACnB,kBAAkB,CAAC,IAAI,CAAC;YAC1B;AACF,QAAA,CAAC;AAED,QAAA,mBAAmB,EAAE;IACvB,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;;IAGjE,SAAS,CAAC,MAAK;;QAEb,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;;QAG3B,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,eAAe,EAAE;YAC9C,WAAW,CAAC,EAAE,CAAC;YACf,cAAc,CAAC,IAAI,CAAC;QACtB;AACF,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;;IAGjC,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,aAAa,GAAG,YAAW;AAC/B,YAAA,IACE,CAAC,mBAAmB;AACpB,gBAAA,mBAAmB,CAAC,MAAM,GAAG,eAAe,EAC5C;gBACA;YACF;YAEA,YAAY,CAAC,IAAI,CAAC;YAClB,cAAc,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI;AACF,gBAAA,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,mBAAmB,CAAC;gBACzD,WAAW,CAAC,OAAO,CAAC;YACtB;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,gBAAA,cAAc,CACZ,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,eAAe,CACzD;YACH;oBAAU;gBACR,YAAY,CAAC,KAAK,CAAC;YACrB;AACF,QAAA,CAAC;;AAGD,QAAA,IAAI,YAAY,CAAC,OAAO,EAAE;AACxB,YAAA,aAAa,EAAE;QACjB;IACF,CAAC,EAAE,CAAC,mBAAmB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;;IAG1D,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;YAC/C,IACE,WAAW,CAAC,OAAO;gBACnB,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EACnD;gBACA,eAAe,CAAC,KAAK,CAAC;YACxB;AACF,QAAA,CAAC;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC;AAC1D,QAAA,OAAO,MAAK;AACV,YAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC;AAC/D,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,kBAAkB,GAAG,CAAC,CAAsC,KAAI;AACpE,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;;AAE5B,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI;QAE3B,aAAa,CAAC,KAAK,CAAC;QAEpB,IAAI,cAAc,EAAE;YAClB,iBAAiB,CAAC,IAAI,CAAC;YACvB,QAAQ,CAAC,EAAE,CAAC;QACd;QAEA,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,eAAe,CAAC;AACzD,IAAA,CAAC;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,MAAS,KAAI;;AAEvC,QAAA,YAAY,CAAC,OAAO,GAAG,KAAK;QAE5B,OAAO,CAAC,GAAG,CAAC,CAAA,yBAAA,EAA4B,MAAM,CAAC,EAAE,CAAA,CAAE,CAAC;QACpD,iBAAiB,CAAC,MAAM,CAAC;AACzB,QAAA,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACtC,QAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;QAC3B,eAAe,CAAC,KAAK,CAAC;AACxB,IAAA,CAAC;IAED,MAAM,oBAAoB,GAAG,MAAK;;AAEhC,QAAA,YAAY,CAAC,OAAO,GAAG,KAAK;QAE5B,iBAAiB,CAAC,IAAI,CAAC;QACvB,aAAa,CAAC,EAAE,CAAC;QACjB,QAAQ,CAAC,EAAE,CAAC;AACd,IAAA,CAAC;IAED,QACED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAC,GAAG,EAAE,WAAW,EAAA,QAAA,EAAA,CACxCA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CACvBC,GAAA,CAAC,KAAK,EAAA,EACJ,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,OAAA,EAAU,eAAe,CAAA,YAAA,CAAc,EAClE,KAAK,EAAE,cAAc,GAAG,EAAE,GAAG,UAAU,EACvC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,MACP,UAAU,CAAC,MAAM,IAAI,eAAe;AACpC,4BAAA,YAAY,CAAC,OAAO;4BACpB,eAAe,CAAC,IAAI,CAAC,EAEvB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAC,KAAK,EAClB,IAAI,EAAC,qBAAqB,EAC1B,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAA,CACjD,EAED,cAAc,KACbA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mDAAmD,EAC7D,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,QAAQ,EAAA,QAAA,EAElBA,GAAA,CAAC,CAAC,EAAA,EAAC,SAAS,EAAC,2CAA2C,GAAG,EAAA,CACpD,CACV,CAAA,EAAA,CACG,EAGL,cAAc,KACbA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6DAA6D,EAAA,QAAA,EAC1ED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAC9B,cAAwC,CAAC,QAAQ,IACjDC,aACE,GAAG,EAAG,cAAwC,CAAC,QAAS,EACxD,GAAG,EAAE,eAAe,CAAC,cAAc,CAAC,EACpC,SAAS,EAAC,0CAA0C,EAAA,CACpD,KAEF,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;AACxB,oCAAA,SAAS,EAAE,iCAAiC;iCAC7C,CAAC,CACH,EACDD,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAC1C,eAAe,CAAC,cAAc,CAAC,EAAA,CAC5B,EACL,gBAAgB,IAAI,gBAAgB,CAAC,cAAc,CAAC,KACnDA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0BAA0B,EAAA,QAAA,EACtC,gBAAgB,CAAC,cAAc,CAAC,EAAA,CAC7B,CACP,CAAA,EAAA,CACG,CAAA,EAAA,CACF,EACNA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAC,2DAA2D,EACrE,QAAQ,EAAE,QAAQ,EAAA,QAAA,EAElBA,GAAA,CAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,EAAA,CAClB,CAAA,EAAA,CACL,EAAA,CACF,CACP,EAEA,YAAY,IAAI,QAAQ,EAAE,MAAM,GAAG,CAAC,KACnCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gFAAgF,EAAA,QAAA,EAC7FA,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,MAAM,EAAA,QAAA,EACjB,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,MACnBA,GAAA,CAAA,IAAA,EAAA,EAEE,SAAS,EAAC,4CAA4C,EACtD,OAAO,EAAE,MAAM,kBAAkB,CAAC,MAAM,CAAC,EAAA,QAAA,EAEzCD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAC/B,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;AACzB,oCAAA,SAAS,EAAE,uBAAuB;iCACnC,CAAC,EACFA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,MAAM,aACnBC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,aAAa,EAAA,QAAA,EAAE,eAAe,CAAC,MAAM,CAAC,EAAA,CAAO,EAC3D,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAC3CA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EACnC,gBAAgB,CAAC,MAAM,CAAC,EAAA,CACrB,CACP,CAAA,EAAA,CACG,CAAA,EAAA,CACF,EAAA,EAhBD,MAAM,CAAC,EAAE,CAiBX,CACN,CAAC,EAAA,CACC,EAAA,CACD,CACP,EAEA,YAAY,IAAI,WAAW,KAC1BA,aAAK,SAAS,EAAC,4GAA4G,EAAA,QAAA,EACzHD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,CAC/CC,GAAA,CAAC,CAAC,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAAA,SAAA,EACtB,WAAW,CAAA,EAAA,CACf,EAAA,CACF,CACP,EAEA,YAAY,IAAI,KAAK,IAAI,CAAC,WAAW,KACpCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4GAA4G,YACzHD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,CAC/CC,GAAA,CAAC,CAAC,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAC7B,KAAK,CAAA,EAAA,CACF,EAAA,CACF,CACP,EAEA,YAAY;gBACX,mBAAmB;gBACnB,QAAQ,EAAE,MAAM,KAAK,CAAC;AACtB,gBAAA,CAAC,SAAS;AACV,gBAAA,CAAC,WAAW;AACZ,gBAAA,CAAC,KAAK,KACJA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uFAAuF,EAAA,QAAA,EACnG,mBAAmB,CAAC,MAAM,GAAG;sBAC1B,CAAA,cAAA,EAAiB,eAAe,CAAA,qBAAA;AAClC,sBAAE,gDAAgD,EAAA,CAChD,CACP,EAEF,SAAS,IAAI,YAAY,KACxBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uFAAuF,EAAA,QAAA,EACpGD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,CAC/CC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sEAAsE,EAAA,CAAO,EAAA,YAAA,CAAA,EAAA,CAExF,EAAA,CACF,CACP,CAAA,EAAA,CACG;AAEV;;AC5RM,SAAU,uBAAuB,CAA6B,EAClE,KAAK,EACL,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,aAAa,EAAE,cAAc,EAC7B,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GAAG,IAAI,EACvB,KAAK,EACL,eAAe,GAAG,CAAC,EACnB,YAAY,GAAG,GAAG,GACc,EAAA;IAChC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAChD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC3C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAM,KAAK,CAAC;IAC9D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;AACnE,IAAA,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC;AAChD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;IAC/C,MAAM,mBAAmB,GAAG,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC;;IAGjE,SAAS,CAAC,MAAK;;AAEb,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE;YACtB,gBAAgB,CAAC,KAAK,CAAC;YACvB,cAAc,CAAC,IAAI,CAAC;YACpB;QACF;;AAGA,QAAA,IAAI,UAAU,CAAC,MAAM,GAAG,eAAe,EAAE;YACvC,gBAAgB,CAAC,EAAE,CAAC;YACpB,cAAc,CAAC,IAAI,CAAC;YACpB;QACF;IACF,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;;IAGxC,SAAS,CAAC,MAAK;;AAEb,QAAA,IACE,CAAC,mBAAmB,CAAC,IAAI,EAAE;AAC3B,YAAA,mBAAmB,CAAC,MAAM,GAAG,eAAe,EAC5C;YACA;QACF;AAEA,QAAA,MAAM,aAAa,GAAG,YAAW;AAC/B,YAAA,IAAI;gBACF,cAAc,CAAC,IAAI,CAAC;gBACpB,cAAc,CAAC,IAAI,CAAC;AACpB,gBAAA,MAAM,QAAQ,CAAC,mBAAmB,CAAC;YACrC;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,cAAc,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,eAAe,CAAC;YACtE;oBAAU;gBACR,cAAc,CAAC,KAAK,CAAC;YACvB;AACF,QAAA,CAAC;AAED,QAAA,aAAa,EAAE;IACjB,CAAC,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;;IAGpD,SAAS,CAAC,MAAK;QACb,gBAAgB,CAAC,KAAK,CAAC;AACzB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,IAAO,KAAI;QACV,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CACnC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CACtC;YAED,IAAI,UAAU,EAAE;AACd,gBAAA,iBAAiB,CACf,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAC5D;YACH;iBAAO;gBACL,iBAAiB,CAAC,CAAC,GAAG,aAAa,EAAE,IAAI,CAAC,CAAC;YAC7C;;YAEA,IAAI,gBAAgB,EAAE;gBACpB,SAAS,CAAC,IAAI,CAAC;YACjB;QACF;aAAO;AACL,YAAA,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC;YACzB,SAAS,CAAC,KAAK,CAAC;QAClB;IACF,CAAC,EACD,CAAC,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAC/D;AAED,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,YAAe,KAAI;AAClB,QAAA,iBAAiB,CACf,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC,CAC5D;AACH,IAAA,CAAC,EACD,CAAC,aAAa,EAAE,iBAAiB,CAAC,CACnC;IAED,MAAM,gBAAgB,GAAG,MAAK;QAC5B,IAAI,CAAC,QAAQ,EAAE;YACb,SAAS,CAAC,IAAI,CAAC;QACjB;AACF,IAAA,CAAC;IAED,MAAM,eAAe,GAAG,MAAK;;;QAG3B,IAAI,CAAC,gBAAgB,EAAE;YACrB,UAAU,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;QACzC;AACF,IAAA,CAAC;;IAGD,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;YAC/C,IACE,WAAW,CAAC,OAAO;gBACnB,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EACnD;gBACA,SAAS,CAAC,KAAK,CAAC;YAClB;AACF,QAAA,CAAC;AAED,QAAA,MAAM,eAAe,GAAG,CAAC,KAAoB,KAAI;AAC/C,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;gBAC1B,SAAS,CAAC,KAAK,CAAC;YAClB;AACF,QAAA,CAAC;QAED,IAAI,MAAM,EAAE;AACV,YAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC;AAC1D,YAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC;QACvD;AAEA,QAAA,OAAO,MAAK;AACV,YAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC;AAC7D,YAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,eAAe,CAAC;AAC1D,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;;IAGZ,MAAM,yBAAyB,GAAG,CAAC,MAAS,MAC1CD,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,qIAAqI,aAClJ,cAAc,CAAC,MAAM,CAAC,EACvBC,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,EACvC,SAAS,EAAC,iDAAiD,EAC3D,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAC,aAAa,EAAA,QAAA,EAEnBA,GAAA,CAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CAClB,CAAA,EAAA,CACJ,CACR;IAED,MAAM,qBAAqB,GAAG,CAAC,MAAS,EAAE,UAAmB,MAC3DD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,aAC1CC,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D;AACE,sBAAE;AACF,sBAAE,qBAAqB,CAC1B,EAAA,QAAA,EAEA,UAAU,IAAIA,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,oBAAoB,EAAA,CAAG,EAAA,CACnD,EACND,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,aAC5BC,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,aAAa,EACb,UAAU,GAAG,kBAAkB,GAAG,eAAe,CAClD,EAAA,QAAA,EAEA,cAAc,CAAC,MAAM,CAAC,EAAA,CAClB,EACN,gBAAgB,KACfA,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,SAAS,EACT,UAAU,GAAG,qBAAqB,GAAG,eAAe,CACrD,EAAA,QAAA,EAEA,gBAAgB,CAAC,MAAM,CAAC,EAAA,CACpB,CACR,CAAA,EAAA,CACG,CAAA,EAAA,CACF,CACP;AAED,IAAA,QACED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,WAAW,EAAA,QAAA,EAAA,CAExD,aAAa,CAAC,MAAM,GAAG,CAAC,KACvBC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,2BAA2B,YACvC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,MACtBA,uBACG;AACC,0BAAE,kBAAkB,CAAC,IAAI;0BACvB,yBAAyB,CAAC,IAAI,CAAC,EAAA,EAH3B,IAAI,CAAC,EAAE,CAIX,CACP,CAAC,EAAA,CACE,CACP,EAGDA,GAAA,CAAC,KAAK,EAAA,EACJ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9C,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAEA,GAAA,CAAC,MAAM,IAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EACxC,SAAS,EAAC,QAAQ,EAAA,CAClB,EAGD,MAAM,IAAI,CAAC,QAAQ,KAClBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uGAAuG,EAAA,QAAA,EACnH,OAAO,IAAI,WAAW,IACrBD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mDAAmD,aAChEC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sEAAsE,EAAA,CAAO,EAC3F,WAAW,GAAG,cAAc,GAAG,YAAY,CAAA,EAAA,CACxC,IACJ,WAAW,IACbA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAC7CD,cAAK,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAChCC,GAAA,CAAC,CAAC,EAAA,EAAC,SAAS,EAAC,cAAc,EAAA,CAAG,aACtB,WAAW,CAAA,EAAA,CACf,EAAA,CACF,IACJ,KAAK,IACPA,aAAK,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAC7CD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mBAAmB,aAChCC,GAAA,CAAC,CAAC,IAAC,SAAS,EAAC,cAAc,EAAA,CAAG,EAC7B,KAAK,IACF,EAAA,CACF,IACJ,aAAa,CAAC,MAAM,KAAK,CAAC,IAC5BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,YAC7C,UAAU,CAAC,MAAM,GAAG;0BACjB,CAAA,cAAA,EAAiB,eAAe,CAAA,qBAAA;0BAChC,gBAAgB,EAAA,CAChB,KAENA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,MAAM,EAAA,QAAA,EAClB,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC1B,wBAAA,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CACnC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CACtC;wBAED,QACEA,gBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,gBAAgB,CAAC,IAAI,CAAC,EACrC,SAAS,EAAE,EAAE,CACX,gEAAgE,EAChE;AACE,kCAAE;AACF,kCAAE,sCAAsC,CAC3C,EAAA,QAAA,EAEA;AACC,kCAAE,cAAc,CAAC,IAAI,EAAE,UAAU;AACjC,kCAAE,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAA,EAZtC,IAAI,CAAC,EAAE,CAaL;AAEb,oBAAA,CAAC,CAAC,EAAA,CACE,CACP,GACG,CACP,CAAA,EAAA,CACG;AAEV;;AChPA,MAAM,KAAK,GAAG,CAAC,EACb,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,OAAO,GAAG,MAAM,EAChB,IAAI,GAAG,IAAI,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,GAAG,KAAK,EACjB,mBAAmB,GAAG,IAAI,EAC1B,SAAS,EACT,gBAAgB,EAChB,KAAK,GACM,KAAI;;IAEf,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,YAAY,GAAG,CAAC,KAAoB,KAAI;YAC5C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,EAAE;AACpC,gBAAA,OAAO,EAAE;YACX;AACF,QAAA,CAAC;QAED,IAAI,MAAM,EAAE;AACV,YAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC;;YAElD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;QACzC;AAEA,QAAA,OAAO,MAAK;AACV,YAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AACxC,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErB,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;IAExB,MAAM,gBAAgB,GAAG,MAAK;QAC5B,QAAQ,OAAO;AACb,YAAA,KAAK,OAAO;gBACV,OAAO;AACL,oBAAA,IAAI,EAAEA,GAAA,CAACG,WAAW,IAAC,SAAS,EAAC,wBAAwB,EAAA,CAAG;AACxD,oBAAA,MAAM,EAAE,iBAAiB;AACzB,oBAAA,UAAU,EAAE,gBAAgB;AAC5B,oBAAA,WAAW,EAAE,qBAAqB;iBACnC;AACH,YAAA,KAAK,SAAS;gBACZ,OAAO;AACL,oBAAA,IAAI,EAAEH,GAAA,CAACI,aAAa,IAAC,SAAS,EAAC,0BAA0B,EAAA,CAAG;AAC5D,oBAAA,MAAM,EAAE,mBAAmB;AAC3B,oBAAA,UAAU,EAAE,kBAAkB;AAC9B,oBAAA,WAAW,EAAE,uBAAuB;iBACrC;AACH,YAAA,KAAK,cAAc;gBACjB,OAAO;AACL,oBAAA,IAAI,EAAEJ,GAAA,CAACK,cAAW,IAAC,SAAS,EAAC,0BAA0B,EAAA,CAAG;AAC1D,oBAAA,MAAM,EAAE,mBAAmB;AAC3B,oBAAA,UAAU,EAAE,kBAAkB;AAC9B,oBAAA,WAAW,EAAE,uBAAuB;iBACrC;AACH,YAAA;gBACE,OAAO;AACL,oBAAA,IAAI,EAAEL,GAAA,CAACG,WAAW,IAAC,SAAS,EAAC,0BAA0B,EAAA,CAAG;AAC1D,oBAAA,MAAM,EAAE,mBAAmB;AAC3B,oBAAA,UAAU,EAAE,kBAAkB;AAC9B,oBAAA,WAAW,EAAE,uBAAuB;iBACrC;;AAEP,IAAA,CAAC;AAED,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE;IAExC,MAAM,cAAc,GAAG,MAAK;AAC1B,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,IAAI,EAAE,YAAY;SACnB;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE;AACpC,IAAA,CAAC;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,CAAmB,KAAI;QACjD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,IAAI,mBAAmB,EAAE;AACvD,YAAA,OAAO,EAAE;QACX;AACF,IAAA,CAAC;AAED,IAAA,QACEJ,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qDAAqD,EAAA,QAAA,EAAA,CAElEC,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,+CAA+C,EACzD,OAAO,EAAE,kBAAkB,EAAA,CAC3B,EAGFD,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,wEAAwE,EACxE,8CAA8C,EAC9C,cAAc,EAAE,EAChB,MAAM,EACN,SAAS,CACV,EACD,IAAI,EAAC,QAAQ,EAAA,YAAA,EACF,MAAM,EAAA,iBAAA,EACD,aAAa,EAAA,QAAA,EAAA,CAG7BA,cACE,SAAS,EAAE,EAAE,CACX,gDAAgD,EAChD,aAAa,CAAC,WAAW,CAC1B,EAAA,QAAA,EAAA,CAEDA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAAC,YACzD,aAAa,CAAC,IAAI,EAAA,CACf,EACNA,GAAA,CAAA,IAAA,EAAA,EACE,EAAE,EAAC,aAAa,EAChB,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,aAAa,CAAC,UAAU,CAAC,EAAA,QAAA,EAE/D,KAAK,EAAA,CACH,CAAA,EAAA,CACD,EACNA,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,yDAAyD,EAAA,YAAA,EACxD,aAAa,EAAA,QAAA,EAExBA,IAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EAAA,CAClB,CAAA,EAAA,CACL,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAA,QAAA,EACzCA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAC3C,KAAK,IAAI,OAAO,KAAK,OAAO,IAC3BD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBC,GAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAI,KAAK,CAAC,OAAO,EAAA,CAAK,EACrB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KACtCD,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,mBAAA,EAAA,CAEtC,EACJA,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gBAAgB,YAC3B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MAC7BD,IAAA,CAAA,IAAA,EAAA,EAAgB,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAAA,SAAA,EACrC,KAAK,CAAC,IAAI,QAAI,KAAK,CAAC,OAAO,CAAA,EAAA,EADvB,KAAK,CAET,CACN,CAAC,GACC,CAAA,EAAA,CACD,CACP,CAAA,EAAA,CACG,KAEN,QAAQ,CACT,EAAA,CACG,EAAA,CACF,EAGL,CAAC,aAAa,IAAI,eAAe,MAChCA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kDAAkD,EAAA,QAAA,EAAA,CAC9D,eAAe,KACdC,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,iBAAiB,IAAI,OAAO,EACrC,QAAQ,EAAE,SAAS,EAAA,QAAA,EAElB,eAAe,GACT,CACV,EACA,aAAa,KACZA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,GAAG,aAAa,EACtD,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,SAAS,EAAA,QAAA,EAEjB,aAAa,EAAA,CACP,CACV,CAAA,EAAA,CACG,CACP,CAAA,EAAA,CACG,CAAA,EAAA,CACF;AAEV;;AC9NA,MAAM,YAAY,GAAuC;AACvD,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,EAAE,EAAE,WAAW;AACf,IAAA,EAAE,EAAE,WAAW;CAChB;AAED,MAAM,iBAAiB,GAAuC;AAC5D,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,EAAE,EAAE,SAAS;AACb,IAAA,EAAE,EAAE,SAAS;CACd;AAED,SAAS,iBAAiB,CAAC,EACzB,QAAQ,EACR,SAAS,GAIV,EAAA;IACC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE7C,SAAS,CAAC,MAAK;QACb,IAAI,SAAS,EAAE;YACb,UAAU,CAAC,IAAI,CAAC;YAChB;QACF;;AAEA,QAAA,IAAI,QAAQ,IAAI,GAAG,EAAE;YACnB,UAAU,CAAC,IAAI,CAAC;AAChB,YAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AACnD,YAAA,OAAO,MAAM,YAAY,CAAC,CAAC,CAAC;QAC9B;;QAEA,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,GAAG,EAAE;YAClC,UAAU,CAAC,IAAI,CAAC;YAChB;QACF;QACA,UAAU,CAAC,KAAK,CAAC;AACnB,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEzB,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI;AAEzB,IAAA,MAAM,aAAa,GAAG,SAAS,IAAI,QAAQ,KAAK,CAAC;AAEjD,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0CAA0C,YACvDA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,gEAAgE,EAChE,aAAa,IAAI,eAAe,CACjC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,GAAG,KAAK,GAAG,GAAG,QAAQ,CAAA,CAAA,CAAG,EAAE,EAAA,CACxD,EAAA,CACE;AAEV;AAEO,MAAM,kBAAkB,GAAsC,CAAC,EACpE,QAAQ,EACR,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,IAAI,GAAG,IAAI,EACX,cAAc,GAAG,CAAC,EAClB,SAAS,GAAG,KAAK,EACjB,gBAAgB,GAAG,IAAI,EACvB,MAAM,GAAG,SAAS,EAClB,aAAa,GAAG,CAAC,EACjB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,GACZ,KAAI;AACH,IAAA,MAAM,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAErD,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE;AAE3D,IAAA,MAAM,gBAAgB,GAAG,CAAC,CAAsC,KAAI;QAClE,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,IAAI,IAAI,CAAC,IAAI,GAAG,aAAa,GAAG,IAAI,GAAG,IAAI,EAAE;YAC3C,kBAAkB,IAAI;AACtB,YAAA,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;YACnB;QACF;QAEA,YAAY,CAAC,IAAI,CAAC;QAClB,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;AACtB,IAAA,CAAC;IAED,MAAM,mBAAmB,GAAG,MAAK;QAC/B,cAAc,CAAC,KAAK,CAAC;AACrB,QAAA,eAAe,EAAE;AACnB,IAAA,CAAC;IAED,QACED,IAAA,CAAAO,QAAA,EAAA,EAAA,QAAA,EAAA,CACEP,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,UAAU,EACpB,YAAY,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,EACtC,YAAY,EAAE,MAAM,YAAY,CAAC,KAAK,CAAC,EAAA,QAAA,EAAA,CAEvCC,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,OAAO,EACZ,SAAS,EAAE,EAAE,CACX,iDAAiD,EACjD,YAAY,CAAC,IAAI,CAAC,CACnB,EAAA,CACD,EAGFA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,2EAA2E,EAC3E,iBAAiB,CAAC,IAAI,CAAC,CACxB,EAAA,CACD,EAEFA,GAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,MAAM,EACX,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAC,QAAQ,EAClB,QAAQ,EAAE,gBAAgB,EAAA,CAC1B,EAED,SAAS,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,KACnCD,IAAA,CAAAO,QAAA,EAAA,EAAA,QAAA,EAAA,CAEEN,gBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,eAAe,EACxB,SAAS,EAAC,oJAAoJ,EAAA,YAAA,EACnJ,oBAAoB,EAAA,QAAA,EAE/BA,IAAC,MAAM,EAAA,EAAC,SAAS,EAAC,oBAAoB,EAAA,CAAG,GAClC,EAGR,gBAAgB,KACfA,GAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,cAAc,CAAC,IAAI,CAAC,EACnC,SAAS,EAAC,2IAA2I,EAAA,YAAA,EAC1I,sBAAsB,EAAA,QAAA,EAEjCA,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,oBAAoB,EAAA,CAAG,EAAA,CACjC,CACV,CAAA,EAAA,CACA,CACJ,IACG,EAENA,GAAA,CAAC,iBAAiB,EAAA,EAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAA,CAAI,CAAA,EAAA,CACjE,EAGNA,IAAC,KAAK,EAAA,EACJ,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EACpC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,aAAa,EAAE,kBAAkB,EACjC,eAAe,EAAE,WAAW,EAC5B,eAAe,EAAE,mBAAmB,EACpC,iBAAiB,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EAAA,QAAA,EAE9CA,GAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAI,oBAAoB,EAAA,CAAK,EAAA,CACvB,CAAA,EAAA,CACP;AAEP;;ACjNA,MAAM,mBAAmB,GAAG,CAG1B,EACA,OAAO,EACP,IAAI,EACJ,OAAO,EACP,WAAW,GAAG,gBAAgB,EAC9B,iBAAiB,GAAG,WAAW,EAC/B,QAAQ,EACR,KAAK,EAAE,eAAe,EACtB,YAAY,EACZ,UAAU,EACV,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,KAAK,EACL,SAAS,GAC2B,KAAI;IACxC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC3C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAChD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAExD,YAAY,CAAC;AACf,IAAA,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC;IAEhD,MAAM,YAAY,GAAG,MAAK;QACxB,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,SAAS,CAAC,CAAC,MAAM,CAAC;QACpB;AACF,IAAA,CAAC;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;QAC/C,IACE,WAAW,CAAC,OAAO;YACnB,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EACnD;YACA,SAAS,CAAC,KAAK,CAAC;YAChB,aAAa,CAAC,EAAE,CAAC;QACnB;AACF,IAAA,CAAC;IAED,SAAS,CAAC,MAAK;AACb,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC;AAC1D,QAAA,OAAO,MAAK;AACV,YAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC;AAC/D,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,aAAa,GAAG,CAAC,GAAW,KAChC;SACG,SAAS,CAAC,KAAK;AACf,SAAA,OAAO,CAAC,kBAAkB,EAAE,EAAE;AAC9B,SAAA,OAAO,CAAC,IAAI,EAAE,GAAG;AACjB,SAAA,OAAO,CAAC,UAAU,EAAE,GAAG;AACvB,SAAA,OAAO,CAAC,YAAY,EAAE,GAAG;AACzB,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,SAAA,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;AAE7B,IAAA,MAAM,eAAe,GAAG,CAAC,KAAa,KAAI;QACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC1D,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE;AAChE,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAC5C,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAChD,aAAa,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CACxC,CACF;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,EACtB,KAAK,GAAG,EAAc,EACtB,QAAQ,EAAE,aAAa,GAIxB,MACCD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,WAAW,EAAA,QAAA,EAAA,CACzDA,IAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EAAA,YAAA,EACT,IAAI,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CACX,2PAA2P,EAC3P,MAAM,GAAG,2BAA2B,GAAG,YAAY,EACnD,KAAK,IAAI,uCAAuC,CACjD,EAAA,QAAA,EAAA,CAEDC,cAAM,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,mBAAmB,CAAC,EAAA,QAAA,EACnE,KAAK,EAAE,MAAM,GAAG;AACf,8BAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AAChD,8BAAE,WAAW,EAAA,CACV,EACPA,cACE,SAAS,EAAE,EAAE,CACX,6CAA6C,EAC7C,MAAM,GAAG,YAAY,GAAG,UAAU,CACnC,EAAA,QAAA,EAEDA,aACE,SAAS,EAAC,SAAS,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,OAAO,EAAC,WAAW,EAAA,QAAA,EAEnBA,GAAA,CAAA,MAAA,EAAA,EACE,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,CAAC,EAAC,gBAAgB,EAAA,CAClB,EAAA,CACE,EAAA,CACD,CAAA,EAAA,CACA,EAER,MAAM,KACLD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4FAA4F,EAAA,QAAA,EAAA,CAEzGC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAC/CA,GAAA,CAAC,KAAK,EAAA,EACJ,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,iBAAiB,EAC9B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9C,SAAS,EAAC,uCAAuC,EACjD,IAAI,EAAC,IAAI,EAAA,CACT,EAAA,CACE,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0BAA0B,EAAA,QAAA,EACtC,eAAe,CAAC,MAAM,GAAG,CAAC,IACzB,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,MACzBD,IAAA,CAAA,KAAA,EAAA,EAEE,SAAS,EAAC,4DAA4D,EACtE,OAAO,EAAE,MAAK;AACZ,gCAAA,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;gCAChC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAClC,CAAC,IAAY,KACX,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CACxD;gCACD,MAAM,QAAQ,GAAG;AACf,sCAAE,YAAY,CAAC,MAAM,CACjB,CAAC,IAAY,KACX,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,wCAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;sCAEhC,CAAC,GAAG,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;gCAEnC,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oCACvC;gCACF;gCACA,aAAa,CAAC,QAAQ,CAAC;AACvB,gCAAA,QAAQ,GAAG,QAAQ,CAAC;AACtB,4BAAA,CAAC,aAEDC,GAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CACzB,CAAC,IAAY,KACX,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CACxD,EACD,QAAQ,EAAE,CAAC,CAAC,KAAI;wCACd,CAAC,CAAC,eAAe,EAAE;AACnB,wCAAA,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;wCAChC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAClC,CAAC,IAAY,KACX,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CACxD;wCACD,MAAM,QAAQ,GAAG;AACf,8CAAE,YAAY,CAAC,MAAM,CACjB,CAAC,IAAY,KACX,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,gDAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;8CAEhC,CAAC,GAAG,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;wCAEnC,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;4CACvC;wCACF;wCACA,aAAa,CAAC,QAAQ,CAAC;AACvB,wCAAA,QAAQ,GAAG,QAAQ,CAAC;oCACtB,CAAC,EACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,EACnC,SAAS,EAAC,kFAAkF,EAAA,CAC5F,EACFA,GAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,0CAA0C,EAAA,QAAA,EACxD,MAAM,CAAC,KAAK,GACP,CAAA,EAAA,EAvDH,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAwD9B,CACP,CAAC,KAEFA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAAA,kBAAA,EAAA,CAExC,CACP,EAAA,CACG,CAAA,EAAA,CACF,CACP,CAAA,EAAA,CACG,CACP;;IAGD,IAAI,OAAO,EAAE;AACX,QAAA,QACEA,GAAA,CAAC,UAAU,EAAA,EACT,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,MACrCD,yBACG,KAAK,KACJC,GAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,kDAAkD,EAAA,QAAA,EAChE,KAAK,EAAA,CACA,CACT,EACA,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EACnC,KAAK,IAAIA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAE,KAAK,EAAA,CAAK,CAAA,EAAA,CAC5D,CACP,EAAA,CACD;IAEN;;AAGA,IAAA,QACED,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACG,KAAK,KACJC,GAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,kDAAkD,YAChE,KAAK,EAAA,CACA,CACT,EACA,cAAc,CAAC;gBACd,KAAK,EAAE,eAAe,IAAI,iBAAiB;AAC3C,gBAAA,QAAQ,EAAE,CAAC,QAAQ,KAAI;AACrB,oBAAA,IAAI,eAAe,KAAK,SAAS,EAAE;wBACjC,oBAAoB,CAAC,QAAQ,CAAC;oBAChC;AACA,oBAAA,QAAQ,GAAG,QAAQ,CAAC;gBACtB,CAAC;AACF,aAAA,CAAC,EACD,KAAK,IAAIA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAE,KAAK,EAAA,CAAK,CAAA,EAAA,CAC5D;AAEV;;ACzQA,MAAM,IAAI,GAAG,CAAC,EACZ,IAAI,GAAG,IAAI,EACX,WAAW,EAAE,YAAY,GAAG,IAAI,EAChC,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,QAAQ,EAClB,SAAS,EACT,OAAO,EACP,SAAS,EACT,GAAG,GAAG,mBAAmB,EACzB,SAAS,GAAG,KAAK,GACP,KAAI;AACd,IAAA,MAAM,KAAK,GAAG;AACZ,QAAA,EAAE,EAAE,KAAK;AACT,QAAA,EAAE,EAAE,MAAM;AACV,QAAA,EAAE,EAAE,MAAM;AACV,QAAA,EAAE,EAAE,MAAM;KACX;AAED,IAAA,MAAM,SAAS,GAAG;AAChB,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,EAAE,EAAE,WAAW;AACf,QAAA,EAAE,EAAE,WAAW;KAChB;;;IAID,MAAM,OAAO,GACX,SAAS;AACT,SAAC;AACC,cAAE;cACA,OAAO,KAAK;AACd,kBAAE;kBACA,OAAO,KAAK;AACd,sBAAE;sBACA,OAAO,KAAK;AACd,0BAAE;0BACA,iBAAiB,CAAC;AAExB,IAAA,MAAM,WAAW,GAAG,SAAS,IAAI,CAAC,CAAC,OAAO;IAE1C,IAAI,QAAQ,EAAE;QACZ,QACEA,aACE,SAAS,EAAE,EAAE,CACX,kCAAkC,EAClC,SAAS,CAAC,IAAI,CAAC,EACf,WAAW,IAAI,gBAAgB,EAC/B,SAAS,CACV,EACD,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,EACxC,QAAQ,EAAE,WAAW,GAAG,CAAC,GAAG,SAAS,EACrC,SAAS,EACP;AACE,kBAAE,CAAC,CAAC,KAAI;AACJ,oBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;wBACtC,CAAC,CAAC,cAAc,EAAE;wBAClB,OAAO,IAAI;oBACb;gBACF;kBACA,SAAS,EAAA,QAAA,EAGfA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,8BAA8B,EACxC,OAAO,EAAE,CAAC,CAAC,KAAI;;AAEb,oBAAA,IAAI,OAAO,KAAK,cAAc,EAAE;AAC7B,wBAAA,CAAC,CAAC,MAAqC,CAAC,GAAG,GAAG,cAAc;oBAC/D;gBACF,CAAC,EAAA,CACD,EAAA,CACE;IAEV;IAEA,QACEA,aACE,SAAS,EAAE,EAAE,CACX,mBAAmB,EACnB,KAAK,CAAC,IAAI,CAAC,EACX,WAAW,IAAI,gBAAgB,EAC/B,SAAS,CACV,EACD,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,EACxC,QAAQ,EAAE,WAAW,GAAG,CAAC,GAAG,SAAS,EACrC,SAAS,EACP;AACE,cAAE,CAAC,CAAC,KAAI;AACJ,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;oBACtC,CAAC,CAAC,cAAc,EAAE;oBAClB,OAAO,IAAI;gBACb;YACF;cACA,SAAS,EAAA,QAAA,EAIfA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,8BAA8B,EACxC,OAAO,EAAE,CAAC,CAAC,KAAI;;AAEb,gBAAA,IAAI,OAAO,KAAK,cAAc,EAAE;AAC7B,oBAAA,CAAC,CAAC,MAAqC,CAAC,GAAG,GAAG,cAAc;gBAC/D;YACF,CAAC,EAAA,CACD,EAAA,CACE;AAEV;;ACpHO,MAAM,YAAY,GAAgB;AACvC,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,cAAc,EAAE,SAAS;AACzB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,UAAU,EAAE,SAAS;AACtB,KAAA;CACF;AAEM,MAAM,SAAS,GAAgB;AACpC,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,MAAM,EAAE;QACN,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,SAAS;AACpB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,cAAc,EAAE,SAAS;AACzB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,UAAU,EAAE,SAAS;AACtB,KAAA;CACF;AAEM,MAAM,MAAM,GAAG;AACpB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,GAAG,EAAE,SAAS;CACN;;AC7BV,MAAM,YAAY,GAAG,aAAa,CAA+B,SAAS,CAAC;AAOpE,MAAM,aAAa,GAAiC,CAAC,EAC1D,QAAQ,EACR,YAAY,GAAG,QAAQ,GACxB,KAAI;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAQ,YAAY,CAAC;AACvD,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;;IAGpE,SAAS,CAAC,MAAK;AACb,QAAA,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;AAG7B,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;;QAGtC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM;QACnC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC,YAAY,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC,YAAY,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,SAAS,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,cAAc,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC,YAAY,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC,YAAY,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC,UAAU,CAAC;AAChE,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,cAAc,GAAG,CAAC,QAAe,KAAI;QACzC,QAAQ,CAAC,QAAQ,CAAC;AACpB,IAAA,CAAC;AAED,IAAA,MAAM,KAAK,GAAqB;QAC9B,KAAK;AACL,QAAA,QAAQ,EAAE,cAAc;QACxB,WAAW;KACZ;AAED,IAAA,QACEA,GAAA,CAAC,YAAY,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAyB;AAE3E;AAEO,MAAM,QAAQ,GAAG,MAAuB;AAC7C,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC;AACxC,IAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;IACjE;AACA,IAAA,OAAO,OAAO;AAChB;;MC5Da,WAAW,GAA+B,CAAC,EAAE,SAAS,EAAE,KAAI;IACvE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE;AAEtC,IAAA,MAAM,iBAAiB,GAAG,CAAC,QAAe,KAAI;QAC5C,QAAQ,CAAC,QAAQ,CAAC;AACpB,IAAA,CAAC;AAED,IAAA,QACED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,4BAAA,EAA+B,SAAS,IAAI,EAAE,CAAA,CAAE,EAAA,QAAA,EAAA,CAC9DC,cAAM,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,QAAA,EAAA,CAAc,EACjED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,aAC9CC,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,iBAAiB,CAAC,QAAQ,CAAC,EAC1C,SAAS,EAAE,CAAA,2DAAA,EACT,KAAK,KAAK;AACR,8BAAE;8BACA,mCACN,CAAA,CAAE,EAAA,QAAA,EAAA,QAAA,EAAA,CAGK,EACTA,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,EACvC,SAAS,EAAE,CAAA,2DAAA,EACT,KAAK,KAAK;AACR,8BAAE;AACF,8BAAE,mCACN,CAAA,CAAE,oBAGK,CAAA,EAAA,CACL,CAAA,EAAA,CACF;AAEV;;ACnCO,MAAM,aAAa,GAAiC,CAAC,EAC1D,SAAS,GAAG,EAAE,GACf,KAAI;IACH,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE;AAEnD,IAAA,MAAM,qBAAqB,GAAG,CAAC,QAAgB,KAAI;AACjD,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAChE,QAAQ,CACT;QACH;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AAED,IAAA,QACED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,iCAAA,EAAoC,SAAS,CAAA,CAAE,EAAA,QAAA,EAAA,CAC7DC,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,gBAAA,EAAA,CAAoB,EAE9DD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,CAA+B,EAAA,GAAA,EAAE,KAAK,CAAA,EAAA,CAClC,EAEND,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,eAAA,EAAA,CAA8B,EAC9BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sCAAsC,EAAA,QAAA,EAClD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAA,CACjC,CAAA,EAAA,CACF,EAEND,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,CAA+B,EAC/BD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wBAAwB,EAAA,QAAA,EAAA,CACrCA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,EAAqB,qBAAqB,CAAC,eAAe,CAAC,CAAA,EAAA,CAAO,EAClEA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,EACoB,qBAAqB,CAAC,iBAAiB,CAAC,CAAA,EAAA,CACtD,EACNA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,EACuB,GAAG,EACvB,qBAAqB,CAAC,qBAAqB,CAAC,CAAA,EAAA,CACzC,EACNA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,EACyB,GAAG,EACzB,qBAAqB,CAAC,uBAAuB,CAAC,CAAA,EAAA,CAC3C,CAAA,EAAA,CACF,CAAA,EAAA,CACF,EAENA,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEC,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,CAAsC,EAAC,GAAG,EACzC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA,EAAA,CAChD,EAEND,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAC7BC,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,EACjC,SAAS,EAAE,CAAA,0BAAA,EACT,KAAK,KAAK;AACR,sCAAE;sCACA,2BACN,CAAA,CAAE,EAAA,QAAA,EAAA,QAAA,EAAA,CAGK,EACTA,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,EAC9B,SAAS,EAAE,CAAA,0BAAA,EACT,KAAK,KAAK;AACR,sCAAE;AACF,sCAAE,2BACN,CAAA,CAAE,EAAA,QAAA,EAAA,KAAA,EAAA,CAGK,CAAA,EAAA,CACL,EAEND,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,aAC1CC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAAA,SAAA,EAAA,CAE5D,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qDAAqD,0BAE9D,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAAA,SAAA,EAAA,CAE5D,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAAA,SAAA,EAAA,CAE5D,IACF,CAAA,EAAA,CACF,CAAA,EAAA,CACF;AAEV;;MC1Ea,2BAA2B,GAEpC,CAAC,EACH,mBAAmB,GAAG,EAAE,EACxB,mBAAmB,EACnB,WAAW,EAAE,oBAAoB,EACjC,WAAW,GAAG,0CAA0C,EACxD,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,KAAK,EAChB,aAAa,EACb,iBAAiB,GAAG,IAAI,EACxB,KAAK,GAAG,qBAAqB,EAC7B,KAAK,GAAG,oBAAoB,EAC5B,oBAAoB,GACrB,KAAI;IACH,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAC5D,EAAE,CACH;IACD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;IAGjD,MAAM,gBAAgB,GAAG,WAAW,CAClC,OAAO,UAAkB,KAAI;QAC3B,YAAY,CAAC,IAAI,CAAC;AAClB,QAAA,IAAI;;YAEF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAC1C,CAAC,SAAS,KACR,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAChE,gBAAA,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAClE;YAED,sBAAsB,CAAC,QAAQ,CAAC;QAClC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;YACpD,sBAAsB,CAAC,EAAE,CAAC;QAC5B;gBAAU;YACR,YAAY,CAAC,KAAK,CAAC;QACrB;AACF,IAAA,CAAC,EACD,CAAC,oBAAoB,CAAC,CACvB;;IAGD,SAAS,CAAC,MAAK;QACb,gBAAgB,CAAC,EAAE,CAAC;AACtB,IAAA,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;AAEtB,IAAA,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,KAAkB,KAAI;;QAErB,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa,EAAE;AACjD,YAAA,OAAO;QACT;QACA,mBAAmB,CAAC,KAAK,CAAC;AAC5B,IAAA,CAAC,EACD,CAAC,mBAAmB,EAAE,aAAa,CAAC,CACrC;IAED,MAAM,aAAa,GAAG,WAAW,CAC/B,OAAO,EAAU,KAAoC;AACnD,QAAA,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;AACtE,IAAA,CAAC,EACD,CAAC,oBAAoB,CAAC,CACvB;AAED,IAAA,QACED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,aAExCA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,aAC1CC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sEAAsE,YACnFA,GAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,4BAA4B,EAAA,CAAG,EAAA,CAClD,EACNA,YAAI,SAAS,EAAC,qCAAqC,EAAA,QAAA,EAChD,KAAK,IAAI,qBAAqB,EAAA,CAC5B,CAAA,EAAA,CACD,EAGNA,uBACEA,GAAA,CAAA,OAAA,EAAA,EAAO,SAAS,EAAC,8CAA8C,YAC5D,KAAK,IAAI,oBAAoB,EAAA,CACxB,GACJ,EAGNA,GAAA,CAAC,uBAAuB,EAAA,EACtB,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,mBAAmB,EAClC,iBAAiB,EAAE,qBAAqB,EACxC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,EAC9C,gBAAgB,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,EAC/C,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,IAAI,EACd,gBAAgB,EAAE,IAAI,EACtB,SAAS,EAAC,QAAQ,EAClB,kBAAkB,EAAE,CAAC,SAAS,MAC5BA,cAAM,SAAS,EAAC,qIAAqI,EAAA,QAAA,EAClJ,SAAS,CAAC,KAAK,GACX,CACR,EACD,cAAc,EAAE,CAAC,SAAS,EAAE,UAAU,MACpCD,cAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CAC1CC,aACE,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D;AACE,kCAAE;AACF,kCAAE,qBAAqB,CAC1B,EAAA,QAAA,EAEA,UAAU,KACTA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,oBAAoB,EAC9B,IAAI,EAAC,cAAc,EACnB,OAAO,EAAC,WAAW,EAAA,QAAA,EAEnBA,cACE,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,oHAAoH,EACtH,QAAQ,EAAC,SAAS,EAAA,CAClB,GACE,CACP,EAAA,CACG,EACNA,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,aAAa,EACb,UAAU,GAAG,kBAAkB,GAAG,eAAe,CAClD,EAAA,QAAA,EAEA,SAAS,CAAC,KAAK,EAAA,CACX,CAAA,EAAA,CACH,CACP,GACD,EAGD,iBAAiB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,KAClDD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yDAAyD,EAAA,QAAA,EAAA,CACtEC,wBACG;AACC,8BAAE,oBAAoB,CAAC,mBAAmB,CAAC,MAAM;AACjD,8BAAE,CAAA,EAAG,mBAAmB,CAAC,MAAM,CAAA,UAAA,EAC3B,mBAAmB,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,EAC7C,CAAA,SAAA,CAAW,EAAA,CACV,EACN,aAAa,KACZD,eAAM,SAAS,EAAC,eAAe,EAAA,QAAA,EAAA,CAC5B,mBAAmB,CAAC,MAAM,EAAA,GAAA,EAAG,aAAa,CAAA,EAAA,CACtC,CACR,IACG,CACP,CAAA,EAAA,CACG;AAEV;;;;","x_google_ignoreList":[0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,30]}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../src/utils/env-config.ts","../src/utils/index.ts","../src/components/Button/Button.tsx","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/arrow-right.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/eye-off.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/eye.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/heart.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/pencil.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/stethoscope.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/user.js","../node_modules/.pnpm/lucide-react@0.544.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.js","../src/icons/Icon.tsx","../src/icons/DoctorIcon.tsx","../src/icons/PatientIcon.tsx","../src/icons/UserIcon.tsx","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/hooks/useDebounce.ts","../node_modules/.pnpm/react-hook-form@7.66.0_react@18.3.1/node_modules/react-hook-form/dist/index.esm.mjs","../src/hooks/useSelectField.ts","../src/components/SearchAutocomplete/SearchAutocomplete.tsx","../src/components/MultiSearchAutocomplete/MultiSearchAutocomplete.tsx","../src/components/Modal/Modal.tsx","../src/components/ProfileImageUpload/ProfileImageUpload.tsx","../src/components/DropdownMultiSelect/DropdownMultiSelect.tsx","../src/components/Logo/Logo.tsx","../src/theme/themeConfig.ts","../src/theme/ThemeProvider.tsx","../src/components/ThemeToggle/ThemeToggle.tsx","../src/components/ThemeDebugger/ThemeDebugger.tsx","../src/molecules/SpecialtySearchAutocomplete/SpecialtySearchAutocomplete.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","export type Environment = \"local\" | \"dev\" | \"qa\" | \"prod\";\n\nexport interface EnvConfigOverrides {\n bffUrl?: string;\n loginBffUrl?: string;\n appUrl?: string;\n loginUrl?: string;\n dashboardUrl?: string;\n adminUrl?: string;\n}\n\nexport interface EnvConfig {\n env: Environment;\n bffUrl: string;\n loginBffUrl: string;\n appUrl: string;\n loginUrl: string;\n dashboardUrl: string;\n adminUrl: string;\n}\n\nconst LOCAL_PORTS = {\n bff: 8082,\n loginBff: 8080,\n app: 3000,\n login: 3001,\n dashboard: 3002,\n admin: 3008,\n} as const;\n\nfunction buildUrls(environment: Environment): Omit<EnvConfig, \"env\"> {\n if (environment === \"local\") {\n const domain = \"medecine360local.com\";\n // APIs run at api.medecine360local.com (no \"local.\" prefix)\n // Frontend apps run at local.{app}.medecine360local.com\n return {\n bffUrl: `http://api.${domain}:${LOCAL_PORTS.bff}/api/v1`,\n loginBffUrl: `http://api.${domain}:${LOCAL_PORTS.loginBff}/api/v1`,\n appUrl: `http://local.app.${domain}:${LOCAL_PORTS.app}`,\n loginUrl: `http://local.login.${domain}:${LOCAL_PORTS.login}`,\n dashboardUrl: `http://local.dashboard.${domain}:${LOCAL_PORTS.dashboard}`,\n adminUrl: `http://local.admin.${domain}:${LOCAL_PORTS.admin}`,\n };\n }\n\n const prefix = environment === \"prod\" ? \"\" : `${environment}.`;\n const domain = \"medecine360.com\";\n\n return {\n bffUrl: `https://${prefix}api.${domain}/bff/api/v1`,\n loginBffUrl: `https://${prefix}api.${domain}/login-bff/api/v1`,\n appUrl: `https://${prefix}app.${domain}`,\n loginUrl: `https://${prefix}login.${domain}`,\n dashboardUrl: `https://${prefix}dashboard.${domain}`,\n adminUrl: `https://${prefix}admin.${domain}`,\n };\n}\n\n/**\n * Creates an environment configuration with all derived URLs.\n *\n * For deployed environments (dev, qa, prod), only the environment name is needed\n * — all URLs follow a predictable convention.\n *\n * For local development, sensible defaults are provided but can be overridden\n * (e.g. to point BFF URL at a mock server).\n *\n * @param env - The environment name (VITE_ENV value)\n * @param overrides - Optional URL overrides (e.g. for local mock servers)\n */\nexport function createEnvConfig(\n env: string,\n overrides?: EnvConfigOverrides\n): EnvConfig {\n const environment = (env || \"local\") as Environment;\n const derived = buildUrls(environment);\n\n return {\n env: environment,\n ...derived,\n ...overrides,\n };\n}\n","import { clsx, type ClassValue } from \"clsx\";\n\nexport { createEnvConfig } from \"./env-config\";\nexport type {\n EnvConfig,\n EnvConfigOverrides,\n Environment,\n} from \"./env-config\";\n\n/**\n * Default currency for price formatting\n */\nexport const CURRENCY = \"XOF\";\n\n/**\n * Utility function to merge class names\n * @param inputs - Class values to merge\n * @returns Merged class string\n */\nexport function cn(...inputs: ClassValue[]) {\n return clsx(inputs);\n}\n\n/**\n * Utility function to format currency\n * @param amount - Amount to format\n * @param currency - Currency code (default: CURRENCY constant)\n * @returns Formatted currency string\n */\nexport function formatCurrency(amount: number, currency = CURRENCY): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency,\n }).format(amount);\n}\n\n/**\n * Utility function to format date\n * @param date - Date to format\n * @param options - Intl.DateTimeFormat options\n * @returns Formatted date string\n */\nexport function formatDate(\n date: Date | string | number,\n options?: Intl.DateTimeFormatOptions\n): string {\n const dateObj = new Date(date);\n return new Intl.DateTimeFormat(\"en-US\", {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n ...options,\n }).format(dateObj);\n}\n\n/**\n * Utility function to debounce function calls\n * @param func - Function to debounce\n * @param wait - Wait time in milliseconds\n * @returns Debounced function\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n}\n\n/**\n * Utility function to generate unique ID\n * @param prefix - Optional prefix for the ID\n * @returns Unique ID string\n */\nexport function generateId(prefix = \"ews\"): string {\n return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Utility function to format numeric input by removing non-digit characters\n * @param value - String value to format\n * @returns String with only numeric characters\n */\nexport const formatNumeric = (value: string): string => {\n return value.replace(/\\D/g, \"\");\n};\n\n/**\n * Utility function to validate phone numbers\n * Validates phone numbers with 1-17 digits, optionally starting with + symbol\n * @param value - Phone number string to validate\n * @returns Boolean indicating if the phone number is valid\n */\nexport function isValidPhoneNumber(value: string): boolean {\n const trimmedValue = value.trim();\n // Allow + at the beginning, followed by 1-17 digits\n // Or just 1-17 digits without +\n const phoneRegex = /^(\\+\\d{1,17}|\\d{1,17})$/;\n return phoneRegex.test(trimmedValue);\n}\n\n/**\n * Blood type enum matching backend BloodTypeEnum values\n */\nexport enum BloodType {\n A_POSITIVE = \"A+\",\n A_NEGATIVE = \"A-\",\n B_POSITIVE = \"B+\",\n B_NEGATIVE = \"B-\",\n AB_POSITIVE = \"AB+\",\n AB_NEGATIVE = \"AB-\",\n O_POSITIVE = \"O+\",\n O_NEGATIVE = \"O-\",\n UNKNOWN = \"UNKNOWN\",\n}\n\n/**\n * Ordered list of all blood type values.\n * Use this to build select/dropdown options.\n */\nexport const BLOOD_TYPES: BloodType[] = [\n BloodType.A_POSITIVE,\n BloodType.A_NEGATIVE,\n BloodType.B_POSITIVE,\n BloodType.B_NEGATIVE,\n BloodType.AB_POSITIVE,\n BloodType.AB_NEGATIVE,\n BloodType.O_POSITIVE,\n BloodType.O_NEGATIVE,\n BloodType.UNKNOWN,\n];\n","import React from \"react\";\nimport { cn } from \"../../utils\";\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Button variant\n */\n variant?:\n | \"ews-primary\"\n | \"ews-secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"outline\"\n | \"ghost\";\n /**\n * Button size\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Whether the button is in a loading state\n */\n loading?: boolean;\n /**\n * Whether the button should take full width\n */\n fullWidth?: boolean;\n /**\n * Icon to display before the button text\n */\n leftIcon?: React.ReactNode;\n /**\n * Icon to display after the button text\n */\n rightIcon?: React.ReactNode;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"ews-primary\",\n size = \"md\",\n loading = false,\n fullWidth = false,\n leftIcon,\n rightIcon,\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n const baseStyles =\n \"inline-flex items-center justify-center font-medium rounded-md transition-colors focus:outline-none disabled:opacity-50 disabled:pointer-events-none\";\n\n const variants = {\n \"ews-primary\": \"bg-ews-primary text-white hover:bg-ews-primary-hover\",\n \"ews-secondary\":\n \"bg-ews-secondary text-white hover:bg-ews-secondary-hover\",\n success: \"bg-ews-success text-white hover:bg-ews-success-hover\",\n warning: \"bg-ews-warning text-white hover:bg-ews-warning-hover\",\n error: \"bg-ews-error text-white hover:bg-ews-error-hover\",\n outline:\n \"bg-transparent text-sm font-medium text-ews-primary hover:text-ews-primary/80\",\n ghost:\n \"border border-ews-primary text-ews-primary hover:bg-ews-primary hover:text-white disabled:border-gray-400 disabled:text-gray-400 focus:ring-2 focus:ring-offset-2 focus:ring-ews-primary\",\n };\n\n const sizes = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n };\n\n const iconSizes = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n };\n\n return (\n <button\n className={cn(\n baseStyles,\n variants[variant],\n sizes[size],\n fullWidth && \"w-full\",\n className\n )}\n ref={ref}\n disabled={disabled || loading}\n {...props}\n >\n {loading && (\n <svg\n className=\"mr-2 -ml-1 w-4 h-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {!loading && leftIcon && (\n <span className={cn(\"flex items-center mr-2\", iconSizes[size])}>\n {leftIcon}\n </span>\n )}\n {children}\n {!loading && rightIcon && (\n <span className={cn(\"flex items-center ml-2\", iconSizes[size])}>\n {rightIcon}\n </span>\n )}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button };\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst CircleCheckBig = createLucideIcon(\"circle-check-big\", __iconNode);\n\nexport { __iconNode, CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\",\n key: \"mvr1a0\"\n }\n ]\n];\nconst Heart = createLucideIcon(\"heart\", __iconNode);\n\nexport { __iconNode, Heart as default };\n//# sourceMappingURL=heart.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ],\n [\"path\", { d: \"m15 5 4 4\", key: \"1mk7zo\" }]\n];\nconst Pencil = createLucideIcon(\"pencil\", __iconNode);\n\nexport { __iconNode, Pencil as default };\n//# sourceMappingURL=pencil.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M11 2v2\", key: \"1539x4\" }],\n [\"path\", { d: \"M5 2v2\", key: \"1yf1q8\" }],\n [\"path\", { d: \"M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1\", key: \"rb5t3r\" }],\n [\"path\", { d: \"M8 15a6 6 0 0 0 12 0v-3\", key: \"x18d4x\" }],\n [\"circle\", { cx: \"20\", cy: \"10\", r: \"2\", key: \"ts1r5v\" }]\n];\nconst Stethoscope = createLucideIcon(\"stethoscope\", __iconNode);\n\nexport { __iconNode, Stethoscope as default };\n//# sourceMappingURL=stethoscope.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash = createLucideIcon(\"trash\", __iconNode);\n\nexport { __iconNode, Trash as default };\n//# sourceMappingURL=trash.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n];\nconst User = createLucideIcon(\"user\", __iconNode);\n\nexport { __iconNode, User as default };\n//# sourceMappingURL=user.js.map\n","/**\n * @license lucide-react v0.544.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import { LucideProps } from \"lucide-react\";\nimport React from \"react\";\n\nexport interface IconProps extends Omit<LucideProps, \"size\"> {\n /**\n * Icon size\n */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | number;\n /**\n * The Lucide icon component to render\n */\n icon: React.ComponentType<LucideProps>;\n}\n\n// Simple icon props for individual icon components\nexport interface SimpleIconProps {\n /**\n * Icon size in pixels\n */\n size?: number;\n /**\n * Icon color (can be hex, rgb, or Tailwind class)\n */\n color?: string;\n /**\n * Additional CSS classes (supports Tailwind classes)\n */\n className?: string;\n /**\n * Other props passed to the underlying icon\n */\n [key: string]: unknown;\n}\n\nconst Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ size = \"md\", icon: IconComponent, className, ...props }, ref) => {\n const sizes = {\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n };\n\n const iconSize = typeof size === \"number\" ? size : sizes[size];\n\n return (\n <IconComponent\n ref={ref}\n size={iconSize}\n className={className}\n {...props}\n />\n );\n }\n);\n\nIcon.displayName = \"Icon\";\n\nexport { Icon };\n","import { Stethoscope } from \"lucide-react\";\nimport React from \"react\";\nimport { SimpleIconProps } from \"./Icon\";\n\nexport const DoctorIcon: React.FC<SimpleIconProps> = ({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}) => {\n return (\n <Stethoscope size={size} color={color} className={className} {...props} />\n );\n};\n","import { Heart } from \"lucide-react\";\nimport React from \"react\";\nimport { SimpleIconProps } from \"./Icon\";\n\nexport const PatientIcon: React.FC<SimpleIconProps> = ({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}) => {\n return <Heart size={size} color={color} className={className} {...props} />;\n};\n","import { User } from \"lucide-react\";\nimport React from \"react\";\nimport { SimpleIconProps } from \"./Icon\";\n\nexport const UserIcon: React.FC<SimpleIconProps> = ({\n size = 24,\n color = \"currentColor\",\n className = \"\",\n ...props\n}) => {\n return <User size={size} color={color} className={className} {...props} />;\n};\n","import { ChevronDown } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { Eye, EyeOff } from \"../../icons\";\nimport { cn } from \"../../utils\";\n\nexport interface CountryCodeOption {\n code: string;\n country: string;\n}\n\nexport interface CountryCodeSelectProps {\n /**\n * Array of country code options\n */\n options: CountryCodeOption[];\n /**\n * Currently selected country code\n */\n value: string;\n /**\n * Handler for when country code changes\n */\n onChange: (code: string) => void;\n}\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n /**\n * Input variant\n */\n variant?: \"default\" | \"error\" | \"success\";\n /**\n * Input size\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Label for the input\n */\n label?: string;\n /**\n * Helper text to display below the input\n */\n helperText?: string;\n /**\n * Error message to display\n */\n error?: string;\n /**\n * Icon to display before the input\n */\n leftIcon?: React.ReactNode;\n /**\n * Icon to display after the input\n */\n rightIcon?: React.ReactNode;\n /**\n * Text or node to display as a left addon (e.g., currency \"FCFA\")\n */\n leftAddon?: React.ReactNode;\n /**\n * Text or node to display as a right addon inside the input (e.g., currency \"FCFA\")\n */\n rightAddon?: React.ReactNode;\n /**\n * Whether the input should take full width\n */\n fullWidth?: boolean;\n /**\n * Whether to show password toggle for password inputs\n */\n showPasswordToggle?: boolean;\n /**\n * Whether the input is required (shows red asterisk)\n */\n required?: boolean;\n /**\n * Country code dropdown configuration for phone inputs\n */\n countryCodeSelect?: CountryCodeSelectProps;\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n variant = \"default\",\n size = \"md\",\n label,\n helperText,\n error,\n leftIcon,\n rightIcon,\n fullWidth = false,\n showPasswordToggle = false,\n required = false,\n countryCodeSelect,\n leftAddon,\n rightAddon,\n id,\n type = \"text\",\n ...props\n },\n ref\n ) => {\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\n const hasError = Boolean(error);\n const actualVariant = hasError ? \"error\" : variant;\n\n // Password visibility state\n const [showPassword, setShowPassword] = useState(false);\n const isPasswordInput = type === \"password\";\n const shouldShowPasswordToggle = showPasswordToggle && isPasswordInput;\n const actualType = isPasswordInput && showPassword ? \"text\" : type;\n\n // Country code dropdown state\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsDropdownOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const baseStyles =\n \"block w-full rounded-md border transition-colors focus:outline-none focus:ring-2 focus:ring-offset-0 hover:border-ews-primary\";\n\n const variants = {\n default:\n \"border-ews-gray-300 focus:border-ews-primary focus:ring-ews-primary\",\n error: \"border-ews-error focus:border-ews-error focus:ring-ews-error\",\n success:\n \"border-ews-success focus:border-ews-success focus:ring-ews-success\",\n };\n\n const sizes = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-3 py-2 text-base\",\n lg: \"px-4 py-3 text-lg\",\n };\n\n const iconSizes = {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-6 w-6\",\n };\n\n const isCheckbox = type === \"checkbox\";\n\n // For checkboxes, render with or without label based on label prop\n if (isCheckbox) {\n if (label) {\n // Render checkbox with built-in label\n return (\n <div className={cn(\"space-y-1\", fullWidth ? \"w-full\" : \"w-auto\")}>\n <div className=\"flex items-start space-x-3\">\n <input\n id={inputId}\n type={actualType}\n className={cn(\n \"mt-0.5\", // Slight top margin to align with first line of text\n className\n )}\n ref={ref}\n {...props}\n />\n <div className=\"flex-1\">\n <label\n htmlFor={inputId}\n className=\"block text-sm font-medium cursor-pointer text-ews-gray-700\"\n >\n {label}\n {required && <span className=\"ml-1 text-ews-error\">*</span>}\n </label>\n {(error || helperText) && (\n <p\n className={cn(\n \"mt-1 text-sm\",\n error ? \"text-ews-error\" : \"text-ews-gray-500\"\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n </div>\n </div>\n );\n } else {\n // Render just the checkbox for external label usage\n return (\n <input\n id={inputId}\n type={actualType}\n className={cn(className)}\n ref={ref}\n {...props}\n />\n );\n }\n }\n\n // Default rendering for non-checkbox inputs\n return (\n <div className={cn(\"space-y-1\", fullWidth ? \"w-full\" : \"w-auto\")}>\n {label && (\n <label\n htmlFor={inputId}\n className=\"block text-sm font-medium text-ews-gray-700\"\n >\n {label}\n {required && <span className=\"ml-1 text-ews-error\">*</span>}\n </label>\n )}\n <div className=\"relative\">\n {countryCodeSelect && (\n <div className=\"absolute inset-y-0 left-0 flex items-center pl-1 z-10\" ref={dropdownRef}>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setIsDropdownOpen(!isDropdownOpen)}\n className={cn(\n \"flex items-center gap-1 px-2 py-1 rounded text-ews-gray-700\",\n \"hover:bg-ews-gray-50 transition-colors cursor-pointer\",\n \"focus:outline-none focus:ring-2 focus:ring-ews-primary focus:ring-offset-0\",\n \"border-0 bg-transparent text-base\"\n )}\n >\n <span className=\"font-medium\">{countryCodeSelect.value}</span>\n <ChevronDown\n className={cn(\n \"w-4 h-4 text-ews-gray-400 transition-transform\",\n isDropdownOpen && \"rotate-180\"\n )}\n />\n </button>\n\n {isDropdownOpen && (\n <div\n className={cn(\n \"absolute top-full left-0 mt-1 bg-white rounded-md border shadow-lg\",\n \"border-ews-gray-300 min-w-[120px] z-50\"\n )}\n style={{ maxHeight: \"200px\", overflowY: \"auto\" }}\n >\n {countryCodeSelect.options.map((item) => {\n const isSelected = item.code === countryCodeSelect.value;\n return (\n <div\n key={item.code}\n onClick={() => {\n countryCodeSelect.onChange(item.code);\n setIsDropdownOpen(false);\n }}\n className={cn(\n \"px-3 py-2 text-sm cursor-pointer transition-colors\",\n isSelected && \"bg-ews-primary text-white\",\n !isSelected && \"hover:bg-ews-gray-50\"\n )}\n >\n <span className=\"font-medium\">{item.code}</span>\n {item.country && (\n <span className={cn(\n \"ml-2 text-xs\",\n isSelected ? \"text-white/80\" : \"text-ews-gray-500\"\n )}>\n {item.country}\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n )}\n {leftIcon && !countryCodeSelect && !leftAddon && (\n <div className=\"flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none\">\n <span className={cn(\"text-ews-gray-400\", iconSizes[size])}>\n {leftIcon}\n </span>\n </div>\n )}\n {leftAddon && !countryCodeSelect && !leftIcon && (\n <div className=\"flex absolute inset-y-0 left-0 items-center pointer-events-none overflow-hidden rounded-l-md\">\n <span className=\"flex items-center h-full px-3 text-sm font-medium whitespace-nowrap bg-ews-gray-50 border-r border-ews-gray-300 text-ews-gray-600\">\n {leftAddon}\n </span>\n </div>\n )}\n <input\n id={inputId}\n type={actualType}\n className={cn(\n baseStyles,\n variants[actualVariant],\n sizes[size],\n countryCodeSelect && \"pl-24\",\n leftIcon && !countryCodeSelect && !leftAddon && \"pl-10\",\n leftAddon && !countryCodeSelect && !leftIcon && \"pl-16\",\n (rightIcon || shouldShowPasswordToggle) && \"pr-10\",\n rightAddon && !rightIcon && !shouldShowPasswordToggle && \"pr-16\",\n className\n )}\n ref={ref}\n {...props}\n />\n {rightAddon && !rightIcon && !shouldShowPasswordToggle && (\n <div className=\"flex absolute inset-y-0 right-0 items-center pr-3 pointer-events-none\">\n <span className=\"text-sm font-medium text-ews-gray-500\">\n {rightAddon}\n </span>\n </div>\n )}\n {rightIcon && !shouldShowPasswordToggle && (\n <div className=\"flex absolute inset-y-0 right-0 items-center pr-3 pointer-events-none\">\n <span className={cn(\"text-ews-gray-400\", iconSizes[size])}>\n {rightIcon}\n </span>\n </div>\n )}\n {shouldShowPasswordToggle && (\n <button\n type=\"button\"\n className=\"flex absolute inset-y-0 right-0 items-center pr-3\"\n onClick={() => setShowPassword(!showPassword)}\n tabIndex={-1}\n >\n <span\n className={cn(\n \"transition-colors text-ews-gray-400 hover:text-ews-gray-600\",\n iconSizes[size]\n )}\n >\n {showPassword ? <EyeOff size={16} /> : <Eye size={16} />}\n </span>\n </button>\n )}\n </div>\n {(error || helperText) && (\n <p\n className={cn(\n \"text-sm\",\n error ? \"text-ews-error\" : \"text-ews-gray-500\"\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n\n","import { ChevronDown, Search, X } from \"lucide-react\";\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../../utils\";\nimport { Input } from \"../Input\";\n\nexport interface SelectOption<T = unknown> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps<T = unknown> {\n /**\n * Array of options to display\n */\n options: SelectOption<T>[];\n /**\n * Current selected value\n */\n value?: T;\n /**\n * Callback when selection changes\n */\n onChange?: (value: T, option: SelectOption<T>) => void;\n /**\n * Placeholder text when no option is selected\n */\n placeholder?: string;\n /**\n * Label for the select\n */\n label?: string;\n /**\n * Helper text to display below the select\n */\n helperText?: string;\n /**\n * Error message to display\n */\n error?: string;\n /**\n * Whether the select is in an error state\n */\n isError?: boolean;\n /**\n * Size variant\n */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Whether the select is disabled\n */\n disabled?: boolean;\n /**\n * Whether the select is required\n */\n required?: boolean;\n /**\n * Whether the select is searchable\n */\n searchable?: boolean;\n /**\n * Whether the select allows multiple selections\n */\n multiple?: boolean;\n /**\n * Custom class name for the select element\n */\n selectClassName?: string;\n /**\n * Custom class name for the container\n */\n containerClassName?: string;\n /**\n * Custom class name for the dropdown\n */\n dropdownClassName?: string;\n /**\n * Maximum height of the dropdown\n */\n maxHeight?: number;\n /**\n * Whether to show clear button\n */\n clearable?: boolean;\n /**\n * Custom render function for options\n */\n renderOption?: (\n option: SelectOption<T>,\n isSelected: boolean\n ) => React.ReactNode;\n /**\n * Custom render function for selected value\n */\n renderValue?: (option: SelectOption<T> | null) => React.ReactNode;\n}\n\nconst Select = forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options = [],\n value,\n onChange,\n placeholder = \"Select an option...\",\n label,\n helperText,\n error,\n isError = false,\n size = \"md\",\n disabled = false,\n required = false,\n searchable = false,\n multiple: _multiple = false,\n selectClassName,\n containerClassName,\n dropdownClassName,\n maxHeight = 200,\n clearable = false,\n renderOption,\n renderValue,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const selectId = `select-${generatedId}`;\n const hasError = isError || !!error;\n\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const [dropdownPosition, setDropdownPosition] = useState<\"bottom\" | \"top\">(\n \"bottom\"\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n // Find selected option\n const selectedOption = options.find((option) => option.value === value);\n\n // Filter options based on search term\n const filteredOptions = searchable\n ? options.filter((option) =>\n option.label.toLowerCase().includes(searchTerm.toLowerCase())\n )\n : options;\n\n // Calculate dropdown position based on available space\n const calculateDropdownPosition = useCallback(() => {\n if (!containerRef.current) return;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n // More accurate height calculation\n const optionHeight = 40; // Approximate height per option\n const searchHeight = searchable ? 60 : 0;\n const padding = 16; // py-1 = 8px top + 8px bottom\n const dropdownHeight = Math.min(\n maxHeight,\n filteredOptions.length * optionHeight + searchHeight + padding\n );\n\n const spaceBelow = viewportHeight - containerRect.bottom;\n const spaceAbove = containerRect.top;\n\n // Add some buffer (20px) to prevent edge cases\n const buffer = 20;\n\n console.log(\"Position calculation:\", {\n spaceBelow,\n spaceAbove,\n dropdownHeight,\n viewportHeight,\n containerBottom: containerRect.bottom,\n shouldOpenTop:\n spaceBelow < dropdownHeight + buffer &&\n spaceAbove > dropdownHeight + buffer,\n });\n\n // If there's not enough space below but enough space above, position on top\n if (\n spaceBelow < dropdownHeight + buffer &&\n spaceAbove > dropdownHeight + buffer\n ) {\n setDropdownPosition(\"top\");\n } else {\n setDropdownPosition(\"bottom\");\n }\n }, [filteredOptions.length, searchable, maxHeight]);\n\n // Alternative calculation using actual dropdown element when available\n const calculateDropdownPositionWithElement = () => {\n if (!containerRef.current || !dropdownRef.current) return;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n const dropdownRect = dropdownRef.current.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n const spaceBelow = viewportHeight - containerRect.bottom;\n const spaceAbove = containerRect.top;\n const actualDropdownHeight = dropdownRect.height;\n\n console.log(\"Position calculation with element:\", {\n spaceBelow,\n spaceAbove,\n actualDropdownHeight,\n viewportHeight,\n containerBottom: containerRect.bottom,\n });\n\n // If there's not enough space below but enough space above, position on top\n if (\n spaceBelow < actualDropdownHeight &&\n spaceAbove > actualDropdownHeight\n ) {\n setDropdownPosition(\"top\");\n } else {\n setDropdownPosition(\"bottom\");\n }\n };\n\n // Handle click outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchTerm(\"\");\n setFocusedIndex(-1);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Calculate position when dropdown opens\n useEffect(() => {\n if (isOpen) {\n // First calculation based on estimated height\n calculateDropdownPosition();\n\n // Second calculation after dropdown is rendered with actual height\n requestAnimationFrame(() => {\n calculateDropdownPositionWithElement();\n });\n }\n }, [\n isOpen,\n filteredOptions.length,\n searchable,\n maxHeight,\n calculateDropdownPosition,\n ]);\n\n // Recalculate position on window resize\n useEffect(() => {\n const handleResize = () => {\n if (isOpen) {\n calculateDropdownPosition();\n }\n };\n\n window.addEventListener(\"resize\", handleResize);\n window.addEventListener(\"scroll\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n window.removeEventListener(\"scroll\", handleResize);\n };\n }, [isOpen, calculateDropdownPosition]);\n\n // Handle keyboard navigation\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setFocusedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case \"ArrowUp\":\n event.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setFocusedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1\n );\n }\n break;\n case \"Enter\":\n event.preventDefault();\n if (\n isOpen &&\n focusedIndex >= 0 &&\n focusedIndex < filteredOptions.length\n ) {\n handleSelect(filteredOptions[focusedIndex]);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case \"Escape\":\n event.preventDefault();\n setIsOpen(false);\n setSearchTerm(\"\");\n setFocusedIndex(-1);\n break;\n case \"Tab\":\n setIsOpen(false);\n setSearchTerm(\"\");\n setFocusedIndex(-1);\n break;\n }\n };\n\n // Handle option selection\n const handleSelect = (option: SelectOption) => {\n if (option.disabled) return;\n\n onChange?.(option.value, option);\n setIsOpen(false);\n setSearchTerm(\"\");\n setFocusedIndex(-1);\n };\n\n // Handle clear\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation();\n onChange?.(undefined as unknown, {} as SelectOption);\n };\n\n // Handle toggle\n const handleToggle = () => {\n if (disabled) return;\n setIsOpen(!isOpen);\n if (!isOpen && searchable) {\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n };\n\n // Scroll focused option into view\n useEffect(() => {\n if (focusedIndex >= 0 && optionRefs.current[focusedIndex]) {\n optionRefs.current[focusedIndex]?.scrollIntoView({\n block: \"nearest\",\n });\n }\n }, [focusedIndex]);\n\n const sizeClasses = {\n sm: \"text-sm px-3 py-1.5\",\n md: \"text-sm px-3 py-2\",\n lg: \"text-base px-4 py-2.5\",\n };\n\n const iconSizeClasses = {\n sm: \"w-4 h-4\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n };\n\n return (\n <div className={cn(\"w-full\", containerClassName)} ref={containerRef}>\n {label && (\n <label\n htmlFor={selectId}\n className={cn(\n \"block text-sm font-medium mb-1\",\n \"text-ews-gray-700\",\n disabled && \"text-ews-gray-400\"\n )}\n >\n {label}\n {required && <span className=\"ml-1 text-ews-error\">*</span>}\n </label>\n )}\n\n <div className=\"relative\">\n {/* Custom select trigger */}\n <div\n ref={ref as React.RefObject<HTMLDivElement>}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-labelledby={label ? selectId : undefined}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n onClick={handleToggle}\n className={cn(\n // Base styles\n \"ews-select-trigger w-full bg-white border rounded-md shadow-sm transition-colors cursor-pointer\",\n \"focus:outline-none focus:ring-2 focus:ring-offset-0\",\n \"disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-ews-gray-50\",\n\n // Size\n sizeClasses[size],\n\n // Border and focus states\n hasError\n ? \"border-ews-error focus:border-ews-error focus:ring-ews-error/20\"\n : \"border-ews-gray-300 focus:border-ews-primary focus:ring-ews-primary/20\",\n\n // Hover state\n !disabled && !hasError && \"hover:border-ews-gray-400\",\n\n // Text color\n \"text-ews-gray-900\",\n\n // Padding for icons\n \"pr-10\",\n\n selectClassName\n )}\n {...props}\n >\n <div className=\"flex justify-between items-center\">\n <div className=\"flex-1 min-w-0\">\n {selectedOption ? (\n renderValue ? (\n renderValue(selectedOption)\n ) : (\n <span className=\"truncate\">{selectedOption.label}</span>\n )\n ) : (\n <span className=\"text-ews-gray-500\">{placeholder}</span>\n )}\n </div>\n\n <div className=\"flex items-center ml-2 space-x-1\">\n {clearable && selectedOption && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"p-1 rounded hover:bg-ews-gray-100\"\n >\n <X\n className={cn(iconSizeClasses[size], \"text-ews-gray-400\")}\n />\n </button>\n )}\n <ChevronDown\n className={cn(\n iconSizeClasses[size],\n hasError ? \"text-ews-error\" : \"text-ews-gray-400\",\n disabled && \"text-ews-gray-300\",\n isOpen && \"rotate-180 transition-transform\"\n )}\n />\n </div>\n </div>\n </div>\n\n {/* Custom dropdown */}\n {isOpen && (\n <div\n ref={dropdownRef}\n role=\"listbox\"\n className={cn(\n \"absolute z-50 w-full bg-white rounded-md border shadow-lg border-ews-gray-300\",\n \"focus:outline-none\",\n dropdownPosition === \"top\"\n ? \"bottom-full mb-1\"\n : \"top-full mt-1\",\n dropdownClassName\n )}\n style={{ maxHeight: `${maxHeight}px` }}\n >\n {/* Search input */}\n {searchable && (\n <div className=\"p-2 border-b border-ews-gray-200\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 w-4 h-4 transform -translate-y-1/2 text-ews-gray-400\" />\n <Input\n ref={inputRef}\n type=\"text\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n placeholder=\"Search options...\"\n leftIcon={\n <Search className=\"w-4 h-4 text-ews-gray-400\" />\n }\n />\n </div>\n </div>\n )}\n\n {/* Options list */}\n <div\n className=\"overflow-auto py-1\"\n style={{ maxHeight: `${maxHeight - (searchable ? 60 : 0)}px` }}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-ews-gray-500\">\n {searchTerm ? \"No options found\" : \"No options available\"}\n </div>\n ) : (\n filteredOptions.map((option, index) => {\n const isSelected = option.value === value;\n const isFocused = index === focusedIndex;\n\n return (\n <div\n key={`${String(option.value)}-${index}`}\n ref={(el) => (optionRefs.current[index] = el)}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => handleSelect(option)}\n className={cn(\n \"px-3 py-2 text-sm cursor-pointer transition-colors\",\n isSelected && \"bg-ews-primary text-white\",\n !isSelected && isFocused && \"bg-ews-gray-100\",\n !isSelected && !isFocused && \"hover:bg-ews-gray-50\",\n option.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n {renderOption ? (\n renderOption(option, isSelected)\n ) : (\n <span className=\"truncate\">{option.label}</span>\n )}\n </div>\n );\n })\n )}\n </div>\n </div>\n )}\n </div>\n\n {/* Helper text or error message */}\n {(helperText || error) && (\n <div className=\"mt-1\">\n {error ? (\n <p className=\"text-sm text-ews-error\">{error}</p>\n ) : (\n <p className=\"text-sm text-ews-gray-500\">{helperText}</p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nSelect.displayName = \"Select\";\n\nexport { Select };\n","import { useEffect, useState } from \"react\";\n\nconst DEFAULT_DELAY = 500;\n\n/**\n * A custom hook that debounces a value\n * @param value - The value to debounce\n * @param delay - The delay in milliseconds (optional, defaults to 300ms)\n * @returns The debounced value\n */\nexport function useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n const actualDelay = delay ?? DEFAULT_DELAY;\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, actualDelay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, actualDelay]);\n\n return debouncedValue;\n}\n\n/**\n * A custom hook that provides a debounced callback function\n * @param callback - The function to debounce\n * @param delay - The delay in milliseconds (optional, defaults to 300ms)\n * @returns A debounced version of the callback\n */\nexport function useDebouncedCallback<T extends (...args: unknown[]) => unknown>(\n callback: T,\n delay?: number\n): T {\n const [debounceTimer, setDebounceTimer] = useState<ReturnType<\n typeof setTimeout\n > | null>(null);\n\n const debouncedCallback = ((...args: Parameters<T>) => {\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n\n const actualDelay = delay ?? DEFAULT_DELAY;\n const newTimer = setTimeout(() => {\n callback(...args);\n }, actualDelay);\n\n setDebounceTimer(newTimer);\n }) as T;\n\n useEffect(() => {\n return () => {\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n };\n }, [debounceTimer]);\n\n return debouncedCallback;\n}\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n ? isCheckBoxInput(event.target)\n ? event.target.checked\n : event.target.value\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar isPlainObject = (tempObject) => {\n const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n let copy;\n const isArray = Array.isArray(data);\n const isFileListInstance = typeof FileList !== 'undefined' ? data instanceof FileList : false;\n if (data instanceof Date) {\n copy = new Date(data);\n }\n else if (!(isWeb && (data instanceof Blob || isFileListInstance)) &&\n (isArray || isObject(data))) {\n copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));\n if (!isArray && !isPlainObject(data)) {\n copy = data;\n }\n else {\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n }\n }\n else {\n return data;\n }\n return copy;\n}\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar isUndefined = (val) => val === undefined;\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar get = (object, path, defaultValue) => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);\n return isUndefined(result) || result === object\n ? isUndefined(object[path])\n ? defaultValue\n : object[path]\n : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar set = (object, path, value) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n object[key] = newValue;\n object = object[key];\n }\n};\n\nconst EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n};\nconst VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\n\nconst HookFormContext = React.createContext(null);\nHookFormContext.displayName = 'HookFormContext';\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n const { children, ...data } = props;\n return (React.createElement(HookFormContext.Provider, { value: data }, children));\n};\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n const result = {\n defaultValues: control._defaultValues,\n };\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key;\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n return result;\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFormState(props) {\n const methods = useFormContext();\n const { control = methods.control, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n useIsomorphicLayoutEffect(() => control._subscribe({\n name,\n formState: _localProxyFormState.current,\n exact,\n callback: (formState) => {\n !disabled &&\n updateFormState({\n ...control._formState,\n ...formState,\n });\n },\n }), [name, disabled, exact]);\n React.useEffect(() => {\n _localProxyFormState.current.isValid && control._setValid(true);\n }, [control]);\n return React.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n if (Array.isArray(names)) {\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\n get(formValues, fieldName)));\n }\n isGlobal && (_names.watchAll = true);\n return formValues;\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2, _internal_visited = new WeakSet()) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return object1 === object2;\n }\n if (isDateObject(object1) && isDateObject(object2)) {\n return object1.getTime() === object2.getTime();\n }\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n if (_internal_visited.has(object1) || _internal_visited.has(object2)) {\n return true;\n }\n _internal_visited.add(object1);\n _internal_visited.add(object2);\n for (const key of keys1) {\n const val1 = object1[key];\n if (!keys2.includes(key)) {\n return false;\n }\n if (key !== 'ref') {\n const val2 = object2[key];\n if ((isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2, _internal_visited)\n : val1 !== val2) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nfunction useWatch(props) {\n const methods = useFormContext();\n const { control = methods.control, name, defaultValue, disabled, exact, compute, } = props || {};\n const _defaultValue = React.useRef(defaultValue);\n const _compute = React.useRef(compute);\n const _computeFormValues = React.useRef(undefined);\n const _prevControl = React.useRef(control);\n const _prevName = React.useRef(name);\n _compute.current = compute;\n const [value, updateValue] = React.useState(() => {\n const defaultValue = control._getWatch(name, _defaultValue.current);\n return _compute.current ? _compute.current(defaultValue) : defaultValue;\n });\n const getCurrentOutput = React.useCallback((values) => {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n return _compute.current ? _compute.current(formValues) : formValues;\n }, [control._formValues, control._names, name]);\n const refreshValue = React.useCallback((values) => {\n if (!disabled) {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n if (_compute.current) {\n const computedFormValues = _compute.current(formValues);\n if (!deepEqual(computedFormValues, _computeFormValues.current)) {\n updateValue(computedFormValues);\n _computeFormValues.current = computedFormValues;\n }\n }\n else {\n updateValue(formValues);\n }\n }\n }, [control._formValues, control._names, disabled, name]);\n useIsomorphicLayoutEffect(() => {\n if (_prevControl.current !== control ||\n !deepEqual(_prevName.current, name)) {\n _prevControl.current = control;\n _prevName.current = name;\n refreshValue();\n }\n return control._subscribe({\n name,\n formState: {\n values: true,\n },\n exact,\n callback: (formState) => {\n refreshValue(formState.values);\n },\n });\n }, [control, exact, name, refreshValue]);\n React.useEffect(() => control._removeUnmounted());\n // If name or control changed for this render, synchronously reflect the\n // latest value so callers (like useController) see the correct value\n // immediately on the same render.\n // Optimize: Check control reference first before expensive deepEqual\n const controlChanged = _prevControl.current !== control;\n const prevName = _prevName.current;\n // Cache the computed output to avoid duplicate calls within the same render\n // We include shouldReturnImmediate in deps to ensure proper recomputation\n const computedOutput = React.useMemo(() => {\n if (disabled) {\n return null;\n }\n const nameChanged = !controlChanged && !deepEqual(prevName, name);\n const shouldReturnImmediate = controlChanged || nameChanged;\n return shouldReturnImmediate ? getCurrentOutput() : null;\n }, [disabled, controlChanged, name, prevName, getCurrentOutput]);\n return computedOutput !== null ? computedOutput : value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n * <div>\n * <input {...field} placeholder={props.name} />\n * <p>{fieldState.isTouched && \"Touched\"}</p>\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * </div>\n * );\n * }\n * ```\n */\nfunction useController(props) {\n const methods = useFormContext();\n const { name, disabled, control = methods.control, shouldUnregister, defaultValue, } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const defaultValueMemo = React.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);\n const value = useWatch({\n control,\n name,\n defaultValue: defaultValueMemo,\n exact: true,\n });\n const formState = useFormState({\n control,\n name,\n exact: true,\n });\n const _props = React.useRef(props);\n const _previousNameRef = React.useRef(undefined);\n const _registerProps = React.useRef(control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }));\n _props.current = props;\n const fieldState = React.useMemo(() => Object.defineProperties({}, {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n }), [formState, name]);\n const onChange = React.useCallback((event) => _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name,\n },\n type: EVENTS.CHANGE,\n }), [name]);\n const onBlur = React.useCallback(() => _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name,\n },\n type: EVENTS.BLUR,\n }), [name, control._formValues]);\n const ref = React.useCallback((elm) => {\n const field = get(control._fields, name);\n if (field && elm) {\n field._f.ref = {\n focus: () => elm.focus && elm.focus(),\n select: () => elm.select && elm.select(),\n setCustomValidity: (message) => elm.setCustomValidity(message),\n reportValidity: () => elm.reportValidity(),\n };\n }\n }, [control._fields, name]);\n const field = React.useMemo(() => ({\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange,\n onBlur,\n ref,\n }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);\n React.useEffect(() => {\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n const previousName = _previousNameRef.current;\n if (previousName && previousName !== name && !isArrayField) {\n control.unregister(previousName);\n }\n control.register(name, {\n ..._props.current.rules,\n ...(isBoolean(_props.current.disabled)\n ? { disabled: _props.current.disabled }\n : {}),\n });\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n updateMounted(name, true);\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name, _props.current.defaultValue));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n !isArrayField && control.register(name);\n _previousNameRef.current = name;\n return () => {\n (isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField)\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n React.useEffect(() => {\n control._setDisabledField({\n disabled,\n name,\n });\n }, [disabled, name, control]);\n return React.useMemo(() => ({\n field,\n formState,\n fieldState,\n }), [field, formState, fieldState]);\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm<FormValues>({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n * <form>\n * <Controller\n * control={control}\n * name=\"test\"\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n * <>\n * <input\n * onChange={onChange} // send value to hook form\n * onBlur={onBlur} // notify when input is touched\n * value={value} // return updated value\n * ref={ref} // set ref for focus management\n * />\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n * </>\n * )}\n * />\n * </form>\n * );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst flatten = (obj) => {\n const output = {};\n for (const key of Object.keys(obj)) {\n if (isObjectType(obj[key]) && obj[key] !== null) {\n const nested = flatten(obj[key]);\n for (const nestedKey of Object.keys(nested)) {\n output[`${key}.${nestedKey}`] = nested[nestedKey];\n }\n }\n else {\n output[key] = obj[key];\n }\n }\n return output;\n};\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n * <Form action=\"/api\" control={control}>\n * <input {...register(\"name\")} />\n * <p>{errors?.root?.server && 'Server error'}</p>\n * <button>Submit</button>\n * </Form>\n * );\n * }\n * ```\n */\nfunction Form(props) {\n const methods = useFormContext();\n const [mounted, setMounted] = React.useState(false);\n const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n const submit = async (event) => {\n let hasError = false;\n let type = '';\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n try {\n formDataJson = JSON.stringify(data);\n }\n catch (_a) { }\n const flattenFormValues = flatten(control._formValues);\n for (const key in flattenFormValues) {\n formData.append(key, flattenFormValues[key]);\n }\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n const response = await fetch(String(action), {\n method,\n headers: {\n ...headers,\n ...(encType && encType !== 'multipart/form-data'\n ? { 'Content-Type': encType }\n : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n if (response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n }\n else {\n onSuccess && onSuccess({ response });\n }\n }\n catch (error) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n React.useEffect(() => {\n setMounted(true);\n }, []);\n return render ? (React.createElement(React.Fragment, null, render({\n submit,\n }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\n [type]: message || true,\n },\n }\n : {};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar createSubject = () => {\n let _observers = [];\n const next = (value) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n const subscribe = (observer) => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n const unsubscribe = () => {\n _observers = [];\n };\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n\nfunction extractFormValues(fieldsState, formValues) {\n const values = {};\n for (const key in fieldsState) {\n if (fieldsState.hasOwnProperty(key)) {\n const fieldState = fieldsState[key];\n const fieldValue = formValues[key];\n if (fieldState && isObject(fieldState) && fieldValue) {\n const nestedFieldsState = extractFormValues(fieldState, fieldValue);\n if (isObject(nestedFieldsState)) {\n values[key] = nestedFieldsState;\n }\n }\n else if (fieldsState[key]) {\n values[key] = fieldValue;\n }\n }\n }\n return values;\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar isHTMLElement = (value) => {\n if (!isWeb) {\n return false;\n }\n const owner = value ? value.ownerDocument : 0;\n return (value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction baseGet(object, updatePath) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n return object;\n}\nfunction isEmptyArray(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\nfunction unset(object, path) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n const index = paths.length - 1;\n const key = paths[index];\n if (childObject) {\n delete childObject[key];\n }\n if (index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n unset(object, paths.slice(0, -1));\n }\n return object;\n}\n\nvar objectHasFunction = (data) => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n\nfunction isTraversable(value) {\n return Array.isArray(value) || (isObject(value) && !objectHasFunction(value));\n}\nfunction markFieldsDirty(data, fields = {}) {\n for (const key in data) {\n if (isTraversable(data[key])) {\n fields[key] = Array.isArray(data[key]) ? [] : {};\n markFieldsDirty(data[key], fields[key]);\n }\n else if (!isUndefined(data[key])) {\n fields[key] = true;\n }\n }\n return fields;\n}\nfunction getDirtyFields(data, formValues, dirtyFieldsFromValues) {\n if (!dirtyFieldsFromValues) {\n dirtyFieldsFromValues = markFieldsDirty(formValues);\n }\n for (const key in data) {\n if (isTraversable(data[key])) {\n if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {\n dirtyFieldsFromValues[key] = markFieldsDirty(data[key], Array.isArray(data[key]) ? [] : {});\n }\n else {\n getDirtyFields(data[key], isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n }\n }\n else {\n dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\n }\n }\n return dirtyFieldsFromValues;\n}\n\nconst defaultResult = {\n value: false,\n isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n return defaultResult;\n};\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n\nconst defaultReturn = {\n isValid: false,\n value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous, defaultReturn)\n : defaultReturn;\n\nfunction getFieldValue(_f) {\n const ref = _f.ref;\n if (isFileInput(ref)) {\n return ref.files;\n }\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n if (isCheckBoxInput(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n const fields = {};\n for (const name of fieldsNames) {\n const field = get(_fields, name);\n field && set(fields, name, field._f);\n }\n return {\n criteriaMode,\n names: [...fieldsNames],\n fields,\n shouldUseNativeValidation,\n };\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getRuleValue = (rule) => isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n\nvar getValidationModes = (mode) => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => !!fieldReference &&\n !!fieldReference.validate &&\n !!((isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find((validateFunction) => validateFunction.constructor.name === ASYNC_FUNCTION)));\n\nvar hasValidation = (options) => options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n if (field) {\n const { _f, ...currentField } = field;\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n }\n else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n }\n else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n }\n return;\n};\n\nfunction schemaErrorLookup(errors, _fields, name) {\n const error = get(errors, name);\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n const names = name.split('.');\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n if (foundError && foundError.root && foundError.root.type) {\n return {\n name: `${fieldName}.root`,\n error: foundError.root,\n };\n }\n names.pop();\n }\n return {\n name,\n };\n}\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n return (isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find((key) => _proxyFormState[key] ===\n (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some((currentName) => currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)));\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n if (mode.isOnAll) {\n return false;\n }\n else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n }\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n }\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n\nfunction getValidateError(result, ref, type = 'validate') {\n if (isString(result) ||\n (Array.isArray(result) && result.every(isString)) ||\n (isBoolean(result) && !result)) {\n return {\n type,\n message: isString(result) ? result : '',\n ref,\n };\n }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n\nvar validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, } = field._f;\n const inputValue = get(formValues, name);\n if (!mount || disabledFieldNames.has(name)) {\n return {};\n }\n const inputRef = refs ? refs[0] : ref;\n const setCustomValidity = (message) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n if (isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))) {\n const { value, message } = isString(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n const valueNumber = ref.valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n }\n else {\n const valueDate = ref.valueAsDate || new Date(inputValue);\n const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n if (exceedMax || exceedMin) {\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if ((maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n if (exceedMax || exceedMin) {\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n }\n else if (isObject(validate)) {\n let validationResult = {};\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n setCustomValidity(validateError.message);\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n setCustomValidity(true);\n return error;\n};\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n};\nfunction createFormControl(props = {}) {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState = {\n submitCount: 0,\n isDirty: false,\n isReady: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields = {};\n let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n };\n let _names = {\n mount: new Set(),\n disabled: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback;\n let timer = 0;\n const _proxyFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n let _proxySubscribeFormState = {\n ..._proxyFormState,\n };\n const _subjects = {\n array: createSubject(),\n state: createSubject(),\n };\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n const debounce = (callback) => (wait) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n const _setValid = async (shouldUpdateValid) => {\n if (!_options.disabled &&\n (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid ||\n shouldUpdateValid)) {\n const isValid = _options.resolver\n ? isEmptyObject((await _runSchema()).errors)\n : await executeBuiltInValidation(_fields, true);\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n const _updateIsValidating = (names, isValidating) => {\n if (!_options.disabled &&\n (_proxyFormState.isValidating ||\n _proxyFormState.validatingFields ||\n _proxySubscribeFormState.isValidating ||\n _proxySubscribeFormState.validatingFields)) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n if (args && method && !_options.disabled) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n if (shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))) {\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n if ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))) {\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n }\n else {\n set(_formValues, name, values);\n }\n };\n const updateErrors = (name, error) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n const _setErrors = (errors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n const field = get(_fields, name);\n if (field) {\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n isUndefined(defaultValue) ||\n (ref && ref.defaultChecked) ||\n shouldSkipSetValueAs\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n : setFieldValue(name, defaultValue);\n _state.mount && _setValid();\n }\n };\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output = {\n name,\n };\n if (!_options.disabled) {\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\n isPreviousDirty = !!get(_formState.dirtyFields, name);\n isCurrentFieldPristine\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.dirtyFields ||\n _proxySubscribeFormState.dirtyFields) &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n }\n return shouldUpdateField ? output : {};\n };\n const shouldRenderByError = (name, isValid, error, fieldState) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n if (_options.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(_options.delayError);\n }\n else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n _subjects.state.next(updatedFormState);\n }\n };\n const _runSchema = async (name) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n _updateIsValidating(name);\n return result;\n };\n const executeSchemaAndUpdateState = async (names) => {\n const { errors } = await _runSchema(names);\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n }\n else {\n _formState.errors = errors;\n }\n return errors;\n };\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\n valid: true,\n }) => {\n for (const name in fields) {\n const field = fields[name];\n if (field) {\n const { _f, ...fieldValue } = field;\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name], true);\n }\n const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !shouldOnlyCheckValid, isFieldArrayRoot);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name]);\n }\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid) {\n break;\n }\n }\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\n }\n }\n return context.valid;\n };\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field = get(_fields, name);\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name);\n }\n _names.unMount = new Set();\n };\n const _getDirty = (name, data) => !_options.disabled &&\n (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n }, isGlobal, defaultValue);\n const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));\n const setFieldValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n let fieldValue = value;\n if (field) {\n const fieldReference = field._f;\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n }\n else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.forEach((checkboxRef) => {\n if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {\n if (Array.isArray(fieldValue)) {\n checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);\n }\n else {\n checkboxRef.checked =\n fieldValue === checkboxRef.value || !!fieldValue;\n }\n }\n });\n }\n else {\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n }\n }\n else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n }\n else {\n fieldReference.ref.value = fieldValue;\n if (!fieldReference.ref.type) {\n _subjects.state.next({\n name,\n values: cloneObject(_formValues),\n });\n }\n }\n }\n }\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n options.shouldValidate && trigger(name);\n };\n const setValues = (name, value, options) => {\n for (const fieldKey in value) {\n if (!value.hasOwnProperty(fieldKey)) {\n return;\n }\n const fieldValue = value[fieldKey];\n const fieldName = name + '.' + fieldKey;\n const field = get(_fields, fieldName);\n (_names.array.has(name) ||\n isObject(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n const setValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n set(_formValues, name, cloneValue);\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: cloneObject(_formValues),\n });\n if ((_proxyFormState.isDirty ||\n _proxyFormState.dirtyFields ||\n _proxySubscribeFormState.isDirty ||\n _proxySubscribeFormState.dirtyFields) &&\n options.shouldDirty) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n }\n else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n isWatched(name, _names) && _subjects.state.next({ ..._formState, name });\n _subjects.state.next({\n name: _state.mount ? name : undefined,\n values: cloneObject(_formValues),\n });\n };\n const onChange = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name;\n let isFieldValueUpdated = true;\n const field = get(_fields, name);\n const _updateIsFieldValueUpdated = (fieldValue) => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n if (field) {\n let error;\n let isValid;\n const fieldValue = target.type\n ? getFieldValue(field._f)\n : getEventValue(event);\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation = (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n const watched = isWatched(name, _names, isBlurEvent);\n set(_formValues, name, fieldValue);\n if (isBlurEvent) {\n if (!target || !target.readOnly) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n }\n }\n else if (field._f.onChange) {\n field._f.onChange(event);\n }\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);\n const shouldRender = !isEmptyObject(fieldState) || watched;\n !isBlurEvent &&\n _subjects.state.next({\n name,\n type: event.type,\n values: cloneObject(_formValues),\n });\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {\n if (_options.mode === 'onBlur') {\n if (isBlurEvent) {\n _setValid();\n }\n }\n else if (!isBlurEvent) {\n _setValid();\n }\n }\n return (shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n }\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n if (_options.resolver) {\n const { errors } = await _runSchema([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n isValid = isEmptyObject(errors);\n }\n }\n else {\n _updateIsValidating([name], true);\n error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n }\n else if (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n if (isFieldValueUpdated) {\n field._f.deps &&\n (!Array.isArray(field._f.deps) || field._f.deps.length > 0) &&\n trigger(field._f.deps);\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n const _focusInput = (ref, key) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n const trigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name);\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n }\n else if (name) {\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\n }))).every(Boolean);\n !(!validationResult && !_formState.isValid) && _setValid();\n }\n else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n _subjects.state.next({\n ...(!isString(name) ||\n ((_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n return validationResult;\n };\n const getValues = (fieldNames, config) => {\n let values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n if (config) {\n values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);\n }\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n const getFieldState = (name, formState) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n const clearErrors = (name) => {\n name &&\n convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName));\n _subjects.state.next({\n errors: name ? _formState.errors : {},\n });\n };\n const setError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n const watch = (name, defaultValue) => isFunction(name)\n ? _subjects.state.subscribe({\n next: (payload) => 'values' in payload &&\n name(_getWatch(undefined, defaultValue), payload),\n })\n : _getWatch(name, defaultValue, true);\n const _subscribe = (props) => _subjects.state.subscribe({\n next: (formState) => {\n if (shouldSubscribeByName(props.name, formState.name, props.exact) &&\n shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {\n props.callback({\n values: { ..._formValues },\n ..._formState,\n ...formState,\n defaultValues: _defaultValues,\n });\n }\n },\n }).unsubscribe;\n const subscribe = (props) => {\n _state.mount = true;\n _proxySubscribeFormState = {\n ..._proxySubscribeFormState,\n ...props.formState,\n };\n return _subscribe({\n ...props,\n formState: _proxySubscribeFormState,\n });\n };\n const unregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n _subjects.state.next({\n values: cloneObject(_formValues),\n });\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n !options.keepIsValid && _setValid();\n };\n const _setDisabledField = ({ disabled, name, }) => {\n if ((isBoolean(disabled) && _state.mount) ||\n !!disabled ||\n _names.disabled.has(name)) {\n disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n }\n };\n const register = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n if (field) {\n _setDisabledField({\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : _options.disabled,\n name,\n });\n }\n else {\n updateValidAndValue(name, true, options.value);\n }\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || _options.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength),\n maxLength: getRuleValue(options.maxLength),\n pattern: getRuleValue(options.pattern),\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref) => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n if (radioOrCheckbox\n ? refs.find((option) => option === fieldRef)\n : fieldRef === field._f.ref) {\n return;\n }\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n updateValidAndValue(name, false, undefined, fieldRef);\n }\n else {\n field = get(_fields, name, {});\n if (field._f) {\n field._f.mount = false;\n }\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n const _focusError = () => _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n const _disableForm = (disabled) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(_fields, (ref, name) => {\n const currentField = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n }, 0, false);\n }\n };\n const handleSubmit = (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist &&\n e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n _subjects.state.next({\n isSubmitting: true,\n });\n if (_options.resolver) {\n const { errors, values } = await _runSchema();\n _formState.errors = errors;\n fieldValues = cloneObject(values);\n }\n else {\n await executeBuiltInValidation(_fields);\n }\n if (_names.disabled.size) {\n for (const name of _names.disabled) {\n unset(fieldValues, name);\n }\n }\n unset(_formState.errors, 'root');\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues, e);\n }\n catch (error) {\n onValidError = error;\n }\n }\n else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n const resetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n }\n else {\n setValue(name, options.defaultValue);\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _setValid();\n }\n _subjects.state.next({ ..._formState });\n }\n };\n const _reset = (formValues, keepStateOptions = {}) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n const fieldsToCheck = new Set([\n ..._names.mount,\n ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n ]);\n for (const fieldName of Array.from(fieldsToCheck)) {\n get(_formState.dirtyFields, fieldName)\n ? set(values, fieldName, get(_formValues, fieldName))\n : setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n if (keepStateOptions.keepFieldsRef) {\n for (const fieldName of _names.mount) {\n setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n _fields = {};\n }\n }\n _formValues = _options.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n _subjects.array.next({\n values: { ...values },\n });\n _subjects.state.next({\n values: { ...values },\n });\n }\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n disabled: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues ||\n (!_options.shouldUnregister && !isEmptyObject(values));\n _state.watch = !!_options.shouldUnregister;\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n defaultValues: _defaultValues,\n });\n };\n const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n ? formValues(_formValues)\n : formValues, keepStateOptions);\n const setFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n if (fieldRef.focus) {\n fieldRef.focus();\n options.shouldSelect &&\n isFunction(fieldRef.select) &&\n fieldRef.select();\n }\n }\n };\n const _setFormState = (updatedFormState) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n _options.defaultValues().then((values) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n const methods = {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _subscribe,\n _runSchema,\n _focusError,\n _getWatch,\n _getDirty,\n _setValid,\n _setFieldArray,\n _setDisabledField,\n _setErrors,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _removeUnmounted,\n _disableForm,\n _subjects,\n _proxyFormState,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n subscribe,\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n return {\n ...methods,\n formControl: methods,\n };\n}\n\nvar generateId = () => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16 + d) % 16 | 0;\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n\nvar appendAt = (data, value) => [\n ...data,\n ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n if (!Array.isArray(data)) {\n return [];\n }\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n};\n\nvar prependAt = (data, value) => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n let i = 0;\n const temp = [...data];\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n ? []\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nvar updateAt = (fieldValues, index, value) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n * <form onSubmit={handleSubmit(data => console.log(data))}>\n * {fields.map((item, index) => (\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\n * ))}\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n * append\n * </button>\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n const methods = useFormContext();\n const { control = methods.control, name, keyName = 'id', shouldUnregister, rules, } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\n const _actioned = React.useRef(false);\n control._names.array.add(name);\n React.useMemo(() => rules &&\n fields.length >= 0 &&\n control.register(name, rules), [control, name, fields.length, rules]);\n useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({\n next: ({ values, name: fieldArrayName, }) => {\n if (fieldArrayName === name || !fieldArrayName) {\n const fieldValues = get(values, name);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n }).unsubscribe, [control, name]);\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\n _actioned.current = true;\n control._setFieldArray(name, updatedFieldArrayValues);\n }, [control, name]);\n const append = (value, options) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n const prepend = (value, options) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n const remove = (index) => {\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n !Array.isArray(get(control._fields, name)) &&\n set(control._fields, name, undefined);\n control._setFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n const insert$1 = (index, value, options) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insert(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, insert, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n const swap = (indexA, indexB) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n argA: indexA,\n argB: indexB,\n }, false);\n };\n const move = (from, to) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n argA: from,\n argB: to,\n }, false);\n };\n const update = (index, value) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, updatedFieldArrayValues, updateAt, {\n argA: index,\n argB: updateValue,\n }, true, false);\n };\n const replace = (value) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n };\n React.useEffect(() => {\n control._state.action = false;\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n });\n if (_actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted) &&\n !getValidationModes(control._options.reValidateMode).isOnSubmit) {\n if (control._options.resolver) {\n control._runSchema([name]).then((result) => {\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n if (existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors,\n });\n }\n });\n }\n else {\n const field = get(control._fields, name);\n if (field &&\n field._f &&\n !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit)) {\n validateField(field, control._names.disabled, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\n }));\n }\n }\n }\n control._subjects.state.next({\n name,\n values: cloneObject(control._formValues),\n });\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key) => {\n if (control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n });\n control._names.focus = '';\n control._setValid();\n _actioned.current = false;\n }, [fields, name, control]);\n React.useEffect(() => {\n !get(control._formValues, name) && control._setFieldArray(name);\n return () => {\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n control._options.shouldUnregister || shouldUnregister\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, keyName, shouldUnregister]);\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert$1, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(() => fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })), [fields, keyName]),\n };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input defaultValue=\"test\" {...register(\"example\")} />\n * <input {...register(\"exampleRequired\", { required: true })} />\n * {errors.exampleRequired && <span>This field is required</span>}\n * <button>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n const _formControl = React.useRef(undefined);\n const _values = React.useRef(undefined);\n const [formState, updateFormState] = React.useState({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n isReady: false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n if (!_formControl.current) {\n if (props.formControl) {\n _formControl.current = {\n ...props.formControl,\n formState,\n };\n if (props.defaultValues && !isFunction(props.defaultValues)) {\n props.formControl.reset(props.defaultValues, props.resetOptions);\n }\n }\n else {\n const { formControl, ...rest } = createFormControl(props);\n _formControl.current = {\n ...rest,\n formState,\n };\n }\n }\n const control = _formControl.current.control;\n control._options = props;\n useIsomorphicLayoutEffect(() => {\n const sub = control._subscribe({\n formState: control._proxyFormState,\n callback: () => updateFormState({ ...control._formState }),\n reRenderRoot: true,\n });\n updateFormState((data) => ({\n ...data,\n isReady: true,\n }));\n control._formState.isReady = true;\n return sub;\n }, [control]);\n React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n React.useEffect(() => {\n if (props.mode) {\n control._options.mode = props.mode;\n }\n if (props.reValidateMode) {\n control._options.reValidateMode = props.reValidateMode;\n }\n }, [control, props.mode, props.reValidateMode]);\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n control._focusError();\n }\n }, [control, props.errors]);\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.state.next({\n values: control._getWatch(),\n });\n }, [control, props.shouldUnregister]);\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n React.useEffect(() => {\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, {\n keepFieldsRef: true,\n ...control._options.resetOptions,\n });\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n }\n else {\n control._resetDefaultValues();\n }\n }, [control, props.values]);\n React.useEffect(() => {\n if (!control._state.mount) {\n control._setValid();\n control._state.mount = true;\n }\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n control._removeUnmounted();\n });\n _formControl.current.formState = getProxyFormState(formState, control);\n return _formControl.current;\n}\n\n/**\n * Watch component that subscribes to form field changes and re-renders when watched fields update.\n *\n * @param control - The form control object from useForm\n * @param names - Array of field names to watch for changes\n * @param render - The function that receives watched values and returns ReactNode\n * @returns The result of calling render function with watched values\n *\n * @example\n * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.\n * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.\n *\n * ```tsx\n * const { control } = useForm();\n *\n * <Watch\n * control={control}\n * names={['foo', 'bar', 'baz.qux']}\n * render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}\n * />\n * ```\n */\nconst Watch = ({ control, names, render, }) => render(useWatch({ control, name: names }));\n\nexport { Controller, Form, FormProvider, Watch, appendErrors, createFormControl, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","import {\n Control,\n FieldPath,\n FieldPathValue,\n FieldValues,\n RegisterOptions,\n useController,\n} from \"react-hook-form\";\nimport { SelectOption, SelectProps } from \"../components/Select\";\n\nexport interface UseSelectFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> {\n name: TName;\n control: Control<TFieldValues>;\n options: SelectOption[];\n rules?: Omit<\n RegisterOptions<TFieldValues, TName>,\n \"disabled\" | \"valueAsNumber\" | \"valueAsDate\" | \"setValueAs\"\n >;\n defaultValue?: FieldPathValue<TFieldValues, TName>;\n}\n\nexport function useSelectField<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n name,\n control,\n options: _options,\n rules,\n defaultValue,\n}: UseSelectFieldProps<TFieldValues, TName>) {\n const {\n field,\n fieldState: { error, invalid },\n } = useController({\n name,\n control,\n rules,\n defaultValue,\n });\n\n const selectProps: Omit<SelectProps, \"options\"> = {\n value: field.value,\n onChange: (value) => field.onChange(value),\n isError: invalid,\n error: error?.message,\n };\n\n return {\n selectProps,\n field,\n error,\n invalid,\n };\n}\n","import { LucideIcon, Search, X } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { useDebounce } from \"../../hooks\";\nimport { Input } from \"../Input/Input\";\n\n// Generic interface for searchable entities\nexport interface SearchableEntity {\n id: string;\n [key: string]: unknown;\n}\n\ninterface SearchAutocompleteProps<T extends SearchableEntity> {\n onSelect: (id: string, entity?: T) => void;\n selectedId: string;\n searchFunction: (keyword: string) => Promise<T[]>;\n getEntityById?: (id: string) => Promise<T | undefined>;\n getDisplayValue: (entity: T) => string;\n getSecondaryText?: (entity: T) => string | null;\n placeholder: string;\n icon?: LucideIcon;\n disabled?: boolean;\n minSearchLength?: number;\n debounceTime?: number;\n error?: string;\n}\n\nexport function SearchAutocomplete<T extends SearchableEntity>({\n onSelect,\n selectedId,\n searchFunction,\n getEntityById,\n getDisplayValue,\n getSecondaryText,\n placeholder,\n icon = Search,\n disabled = false,\n minSearchLength = 2,\n debounceTime = 300,\n error,\n}: SearchAutocompleteProps<T>) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [entities, setEntities] = useState<T[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [showDropdown, setShowDropdown] = useState(false);\n const [selectedEntity, setSelectedEntity] = useState<T | null>(null);\n const [initialLoadDone, setInitialLoadDone] = useState(false);\n const [searchError, setSearchError] = useState<string | null>(null);\n\n const dropdownRef = useRef<HTMLDivElement>(null);\n const debouncedSearchTerm = useDebounce(searchTerm, debounceTime);\n\n // Track if this is an initial load or a user-initiated search\n const isUserSearch = useRef(false);\n\n // Only fetch the selected entity by ID once on initial load\n useEffect(() => {\n const fetchSelectedEntity = async () => {\n // Only fetch if we have a selectedId, getEntityById function, and haven't loaded yet\n if (!selectedId || !getEntityById || initialLoadDone) return;\n\n setIsLoading(true);\n try {\n const entity = await getEntityById(selectedId);\n if (entity) {\n setSelectedEntity(entity);\n setSearchTerm(getDisplayValue(entity));\n }\n } catch (error) {\n console.error(\"Error fetching selected entity:\", error);\n } finally {\n setIsLoading(false);\n setInitialLoadDone(true);\n }\n };\n\n fetchSelectedEntity();\n }, [selectedId, getEntityById, getDisplayValue, initialLoadDone]);\n\n // Handle search term changes - only for user-initiated searches\n useEffect(() => {\n // Skip if this is just setting the initial value\n if (!isUserSearch.current) return;\n\n // Clear entities if search term is too short\n if (searchTerm.trim().length < minSearchLength) {\n setEntities([]);\n setSearchError(null);\n }\n }, [searchTerm, minSearchLength]);\n\n // Fetch entities when debounced search term changes - only for user searches\n useEffect(() => {\n const fetchEntities = async () => {\n if (\n !debouncedSearchTerm ||\n debouncedSearchTerm.length < minSearchLength\n ) {\n return;\n }\n\n setIsLoading(true);\n setSearchError(null);\n try {\n const results = await searchFunction(debouncedSearchTerm);\n setEntities(results);\n } catch (error) {\n console.error(\"Error fetching search results:\", error);\n setSearchError(\n error instanceof Error ? error.message : \"Search failed\"\n );\n } finally {\n setIsLoading(false);\n }\n };\n\n // Only fetch if this is a user-initiated search\n if (isUserSearch.current) {\n fetchEntities();\n }\n }, [debouncedSearchTerm, searchFunction, minSearchLength]);\n\n // Handle click outside to close dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setShowDropdown(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n // Mark this as a user-initiated search\n isUserSearch.current = true;\n\n setSearchTerm(value);\n\n if (selectedEntity) {\n setSelectedEntity(null);\n onSelect(\"\");\n }\n\n setShowDropdown(value.trim().length >= minSearchLength);\n };\n\n const handleEntitySelect = (entity: T) => {\n // This is a user selection, not an API fetch\n isUserSearch.current = false;\n\n console.log(`Selected entity with ID: ${entity.id}`);\n setSelectedEntity(entity);\n setSearchTerm(getDisplayValue(entity));\n onSelect(entity.id, entity);\n setShowDropdown(false);\n };\n\n const handleClearSelection = () => {\n // This is a user action, but not a search\n isUserSearch.current = false;\n\n setSelectedEntity(null);\n setSearchTerm(\"\");\n onSelect(\"\");\n };\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n <div className=\"relative\">\n <Input\n type=\"text\"\n placeholder={`${placeholder} (min. ${minSearchLength} characters)`}\n value={selectedEntity ? \"\" : searchTerm}\n onChange={handleSearchChange}\n onFocus={() =>\n searchTerm.length >= minSearchLength &&\n isUserSearch.current &&\n setShowDropdown(true)\n }\n disabled={disabled}\n autoComplete=\"off\"\n name=\"search-autocomplete\"\n leftIcon={React.createElement(icon, { size: 16 })}\n />\n\n {selectedEntity && (\n <button\n type=\"button\"\n className=\"flex absolute inset-y-0 right-0 items-center pr-3\"\n onClick={handleClearSelection}\n disabled={disabled}\n >\n <X className=\"w-5 h-5 text-gray-400 hover:text-gray-500\" />\n </button>\n )}\n </div>\n\n {/* Selected Entity Display */}\n {selectedEntity && (\n <div className=\"p-4 mt-3 rounded-lg border bg-neutral-50 border-neutral-200\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center\">\n {(selectedEntity as { photoUrl?: string }).photoUrl ? (\n <img\n src={(selectedEntity as { photoUrl?: string }).photoUrl!}\n alt={getDisplayValue(selectedEntity)}\n className=\"object-cover mr-3 w-10 h-10 rounded-full\"\n />\n ) : (\n React.createElement(icon, {\n className: \"w-10 h-10 text-neutral-400 mr-3\",\n })\n )}\n <div>\n <div className=\"font-medium text-neutral-900\">\n {getDisplayValue(selectedEntity)}\n </div>\n {getSecondaryText && getSecondaryText(selectedEntity) && (\n <div className=\"text-sm text-neutral-500\">\n {getSecondaryText(selectedEntity)}\n </div>\n )}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={handleClearSelection}\n className=\"transition-colors text-neutral-400 hover:text-neutral-600\"\n disabled={disabled}\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n )}\n\n {showDropdown && entities?.length > 0 && (\n <div className=\"overflow-auto absolute z-10 mt-1 w-full max-h-60 bg-white rounded-md shadow-lg\">\n <ul className=\"py-1\">\n {entities.map((entity) => (\n <li\n key={entity.id}\n className=\"px-4 py-2 cursor-pointer hover:bg-gray-100\"\n onClick={() => handleEntitySelect(entity)}\n >\n <div className=\"flex items-center\">\n {React.createElement(icon, {\n className: \"w-4 h-4 text-gray-400\",\n })}\n <div className=\"ml-2\">\n <div className=\"font-medium\">{getDisplayValue(entity)}</div>\n {getSecondaryText && getSecondaryText(entity) && (\n <div className=\"text-xs text-gray-500\">\n {getSecondaryText(entity)}\n </div>\n )}\n </div>\n </div>\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {showDropdown && searchError && (\n <div className=\"absolute z-10 p-4 mt-1 w-full text-center text-red-600 bg-white rounded-md border border-red-200 shadow-lg\">\n <div className=\"flex justify-center items-center\">\n <X className=\"mr-2 w-4 h-4\" />\n Error: {searchError}\n </div>\n </div>\n )}\n\n {showDropdown && error && !searchError && (\n <div className=\"absolute z-10 p-4 mt-1 w-full text-center text-red-600 bg-white rounded-md border border-red-200 shadow-lg\">\n <div className=\"flex justify-center items-center\">\n <X className=\"mr-2 w-4 h-4\" />\n {error}\n </div>\n </div>\n )}\n\n {showDropdown &&\n debouncedSearchTerm &&\n entities?.length === 0 &&\n !isLoading &&\n !searchError &&\n !error && (\n <div className=\"absolute z-10 p-4 mt-1 w-full text-center text-gray-500 bg-white rounded-md shadow-lg\">\n {debouncedSearchTerm.length < minSearchLength\n ? `Type at least ${minSearchLength} characters to search`\n : \"No results found. Try a different search term.\"}\n </div>\n )}\n\n {isLoading && showDropdown && (\n <div className=\"absolute z-10 p-4 mt-1 w-full text-center text-gray-500 bg-white rounded-md shadow-lg\">\n <div className=\"flex justify-center items-center\">\n <div className=\"mr-2 w-4 h-4 rounded-full border-b-2 animate-spin border-ews-primary\"></div>\n Loading...\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { Check, Search, X } from \"lucide-react\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useDebounce } from \"../../hooks\";\nimport { cn } from \"../../utils\";\nimport { Input } from \"../Input/Input\";\nimport { SearchableEntity } from \"../SearchAutocomplete/SearchAutocomplete\";\n\ninterface MultiSearchAutocompleteProps<T extends SearchableEntity> {\n items: T[];\n selectedItems: T[];\n onSelectionChange: (items: T[]) => void;\n onSearch: (searchTerm: string) => Promise<void>;\n getEntityById?: (id: string) => Promise<T | undefined>;\n getPrimaryText: (entity: T) => string;\n getSecondaryText?: (entity: T) => string | null;\n placeholder: string;\n disabled?: boolean;\n loading?: boolean;\n multiple?: boolean;\n className?: string;\n renderSelectedItem?: (entity: T) => React.ReactNode;\n renderListItem?: (entity: T, isSelected: boolean) => React.ReactNode;\n keepOpenOnSelect?: boolean;\n error?: string;\n minSearchLength?: number;\n debounceTime?: number;\n}\n\nexport function MultiSearchAutocomplete<T extends SearchableEntity>({\n items,\n selectedItems,\n onSelectionChange,\n onSearch,\n getEntityById: _getEntityById,\n getPrimaryText,\n getSecondaryText,\n placeholder,\n disabled = false,\n loading = false,\n multiple = true,\n className,\n renderSelectedItem,\n renderListItem,\n keepOpenOnSelect = true,\n error,\n minSearchLength = 2,\n debounceTime = 300,\n}: MultiSearchAutocompleteProps<T>) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [isOpen, setIsOpen] = useState(false);\n const [filteredItems, setFilteredItems] = useState<T[]>(items);\n const [isSearching, setIsSearching] = useState(false);\n const [searchError, setSearchError] = useState<string | null>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const debouncedSearchTerm = useDebounce(searchTerm, debounceTime);\n\n // Handle search term changes\n useEffect(() => {\n // If search term is empty, show all items\n if (!searchTerm.trim()) {\n setFilteredItems(items);\n setSearchError(null);\n return;\n }\n\n // If search term is too short, don't search\n if (searchTerm.length < minSearchLength) {\n setFilteredItems([]);\n setSearchError(null);\n return;\n }\n }, [searchTerm, items, minSearchLength]);\n\n // Debounced search with API calls\n useEffect(() => {\n // If debounced search term is empty or too short, don't search\n if (\n !debouncedSearchTerm.trim() ||\n debouncedSearchTerm.length < minSearchLength\n ) {\n return;\n }\n\n const performSearch = async () => {\n try {\n setIsSearching(true);\n setSearchError(null);\n await onSearch(debouncedSearchTerm);\n } catch (err) {\n setSearchError(err instanceof Error ? err.message : \"Search failed\");\n } finally {\n setIsSearching(false);\n }\n };\n\n performSearch();\n }, [debouncedSearchTerm, onSearch, minSearchLength]);\n\n // Update filtered items when items prop changes\n useEffect(() => {\n setFilteredItems(items);\n }, [items]);\n\n const handleItemToggle = useCallback(\n (item: T) => {\n if (multiple) {\n const isSelected = selectedItems.some(\n (selected) => selected.id === item.id\n );\n\n if (isSelected) {\n onSelectionChange(\n selectedItems.filter((selected) => selected.id !== item.id)\n );\n } else {\n onSelectionChange([...selectedItems, item]);\n }\n // Keep dropdown open for multiple selection\n if (keepOpenOnSelect) {\n setIsOpen(true);\n }\n } else {\n onSelectionChange([item]);\n setIsOpen(false);\n }\n },\n [selectedItems, onSelectionChange, multiple, keepOpenOnSelect]\n );\n\n const handleRemoveItem = useCallback(\n (itemToRemove: T) => {\n onSelectionChange(\n selectedItems.filter((item) => item.id !== itemToRemove.id)\n );\n },\n [selectedItems, onSelectionChange]\n );\n\n const handleInputFocus = () => {\n if (!disabled) {\n setIsOpen(true);\n }\n };\n\n const handleInputBlur = () => {\n // Don't close immediately to allow for clicks on dropdown items\n // Only close if keepOpenOnSelect is false\n if (!keepOpenOnSelect) {\n setTimeout(() => setIsOpen(false), 150);\n }\n };\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n const handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleEscapeKey);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleEscapeKey);\n };\n }, [isOpen]);\n\n // Default render functions\n const defaultRenderSelectedItem = (entity: T) => (\n <span className=\"inline-flex items-center px-3 py-1 text-sm font-medium rounded-full border bg-ews-primary/10 text-ews-primary border-ews-primary/20\">\n {getPrimaryText(entity)}\n <button\n type=\"button\"\n onClick={() => handleRemoveItem(entity)}\n className=\"ml-2 text-ews-primary/60 hover:text-ews-primary\"\n disabled={disabled}\n title=\"Remove item\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n );\n\n const defaultRenderListItem = (entity: T, isSelected: boolean) => (\n <div className=\"flex items-center space-x-3\">\n <div\n className={cn(\n \"flex justify-center items-center w-5 h-5 rounded border-2\",\n isSelected\n ? \"bg-ews-primary border-ews-primary\"\n : \"border-ews-gray-300\"\n )}\n >\n {isSelected && <Check className=\"w-3 h-3 text-white\" />}\n </div>\n <div className=\"flex flex-col\">\n <span\n className={cn(\n \"font-medium\",\n isSelected ? \"text-ews-primary\" : \"text-gray-900\"\n )}\n >\n {getPrimaryText(entity)}\n </span>\n {getSecondaryText && (\n <span\n className={cn(\n \"text-sm\",\n isSelected ? \"text-ews-primary/70\" : \"text-gray-500\"\n )}\n >\n {getSecondaryText(entity)}\n </span>\n )}\n </div>\n </div>\n );\n\n return (\n <div className={cn(\"relative\", className)} ref={dropdownRef}>\n {/* Selected items display */}\n {selectedItems.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mb-3\">\n {selectedItems.map((item) => (\n <div key={item.id}>\n {renderSelectedItem\n ? renderSelectedItem(item)\n : defaultRenderSelectedItem(item)}\n </div>\n ))}\n </div>\n )}\n\n {/* Search input */}\n <Input\n ref={inputRef}\n type=\"text\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n placeholder={placeholder}\n disabled={disabled}\n leftIcon={<Search className=\"w-4 h-4\" />}\n className=\"w-full\"\n />\n\n {/* Dropdown */}\n {isOpen && !disabled && (\n <div className=\"overflow-auto absolute z-10 mt-1 w-full max-h-60 bg-white rounded-lg border border-gray-200 shadow-lg\">\n {loading || isSearching ? (\n <div className=\"flex items-center px-4 py-3 text-sm text-gray-500\">\n <div className=\"mr-2 w-4 h-4 rounded-full border-b-2 animate-spin border-ews-primary\"></div>\n {isSearching ? \"Searching...\" : \"Loading...\"}\n </div>\n ) : searchError ? (\n <div className=\"px-4 py-3 text-sm text-red-600\">\n <div className=\"flex items-center\">\n <X className=\"mr-2 w-4 h-4\" />\n Error: {searchError}\n </div>\n </div>\n ) : error ? (\n <div className=\"px-4 py-3 text-sm text-red-600\">\n <div className=\"flex items-center\">\n <X className=\"mr-2 w-4 h-4\" />\n {error}\n </div>\n </div>\n ) : filteredItems.length === 0 ? (\n <div className=\"px-4 py-3 text-sm text-gray-500\">\n {searchTerm.length < minSearchLength\n ? `Type at least ${minSearchLength} characters to search`\n : \"No items found\"}\n </div>\n ) : (\n <div className=\"py-1\">\n {filteredItems.map((item) => {\n const isSelected = selectedItems.some(\n (selected) => selected.id === item.id\n );\n\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemToggle(item)}\n className={cn(\n \"flex items-center px-4 py-3 w-full text-left transition-colors\",\n isSelected\n ? \"border-l-4 bg-ews-primary/10 text-ews-primary border-ews-primary\"\n : \"text-gray-900 hover:bg-ews-primary/5\"\n )}\n >\n {renderListItem\n ? renderListItem(item, isSelected)\n : defaultRenderListItem(item, isSelected)}\n </button>\n );\n })}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { AlertCircle, AlertTriangle, CheckCircle, X } from \"lucide-react\";\nimport React, { useEffect } from \"react\";\nimport { cn } from \"../../utils\";\nimport { Button } from \"../Button/Button\";\n\nexport interface ErrorField {\n name: string;\n message: string;\n path?: string;\n}\n\nexport interface ErrorObject {\n code: string;\n message: string;\n fields?: ErrorField[];\n}\n\nexport interface ModalProps {\n /**\n * Whether the modal is open\n */\n isOpen: boolean;\n /**\n * Function to call when modal should be closed\n */\n onClose: () => void;\n /**\n * Modal title\n */\n title: string;\n /**\n * Modal content/description\n */\n children?: React.ReactNode;\n /**\n * Modal variant\n */\n variant?: \"error\" | \"warning\" | \"confirmation\" | \"info\";\n /**\n * Modal size/width\n */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n /**\n * Primary action button text\n */\n primaryAction?: string;\n /**\n * Secondary action button text\n */\n secondaryAction?: string;\n /**\n * Function to call when primary action is clicked\n */\n onPrimaryAction?: () => void;\n /**\n * Function to call when secondary action is clicked\n */\n onSecondaryAction?: () => void;\n /**\n * Whether the primary action button is loading\n */\n isLoading?: boolean;\n /**\n * Whether the modal can be closed by clicking outside or pressing escape\n */\n closeOnOverlayClick?: boolean;\n /**\n * Custom className for the modal\n */\n className?: string;\n /**\n * Custom className for the content\n */\n contentClassName?: string;\n /**\n * Error object for error modals\n */\n error?: ErrorObject;\n}\n\nconst Modal = ({\n isOpen,\n onClose,\n title,\n children,\n variant = \"info\",\n size = \"md\",\n primaryAction,\n secondaryAction,\n onPrimaryAction,\n onSecondaryAction,\n isLoading = false,\n closeOnOverlayClick = true,\n className,\n contentClassName,\n error,\n}: ModalProps) => {\n // Handle escape key press\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && isOpen) {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"keydown\", handleEscape);\n // Prevent body scroll when modal is open\n document.body.style.overflow = \"hidden\";\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"unset\";\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n const getVariantStyles = () => {\n switch (variant) {\n case \"error\":\n return {\n icon: <AlertCircle className=\"w-6 h-6 text-ews-error\" />,\n iconBg: \"bg-ews-error/10\",\n titleColor: \"text-ews-error\",\n borderColor: \"border-ews-error/20\",\n };\n case \"warning\":\n return {\n icon: <AlertTriangle className=\"w-6 h-6 text-ews-warning\" />,\n iconBg: \"bg-ews-warning/10\",\n titleColor: \"text-ews-warning\",\n borderColor: \"border-ews-warning/20\",\n };\n case \"confirmation\":\n return {\n icon: <CheckCircle className=\"w-6 h-6 text-ews-success\" />,\n iconBg: \"bg-ews-success/10\",\n titleColor: \"text-ews-success\",\n borderColor: \"border-ews-success/20\",\n };\n default:\n return {\n icon: <AlertCircle className=\"w-6 h-6 text-ews-primary\" />,\n iconBg: \"bg-ews-primary/10\",\n titleColor: \"text-ews-primary\",\n borderColor: \"border-ews-primary/20\",\n };\n }\n };\n\n const variantStyles = getVariantStyles();\n\n const getSizeClasses = () => {\n const sizeMap = {\n sm: \"max-w-sm\",\n md: \"max-w-md\",\n lg: \"max-w-lg\",\n xl: \"max-w-xl\",\n \"2xl\": \"max-w-2xl\",\n full: \"max-w-full\",\n };\n return sizeMap[size] || sizeMap.md;\n };\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && closeOnOverlayClick) {\n onClose();\n }\n };\n\n return (\n <div className=\"flex fixed inset-0 z-50 justify-center items-center\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 backdrop-blur-sm bg-black/50\"\n onClick={handleOverlayClick}\n />\n\n {/* Modal */}\n <div\n className={cn(\n \"relative w-full bg-white rounded-lg shadow-xl transition-all transform\",\n \"duration-200 animate-in fade-in-0 zoom-in-95\",\n getSizeClasses(),\n \"mx-4\",\n className\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"modal-title\"\n >\n {/* Header */}\n <div\n className={cn(\n \"flex items-center justify-between p-6 border-b\",\n variantStyles.borderColor\n )}\n >\n <div className=\"flex items-center space-x-3\">\n <div className={cn(\"p-2 rounded-full\", variantStyles.iconBg)}>\n {variantStyles.icon}\n </div>\n <h2\n id=\"modal-title\"\n className={cn(\"text-lg font-semibold\", variantStyles.titleColor)}\n >\n {title}\n </h2>\n </div>\n <button\n onClick={onClose}\n className=\"p-1 text-gray-400 transition-colors hover:text-gray-600\"\n aria-label=\"Close modal\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Content */}\n <div className={cn(\"p-6\", contentClassName)}>\n <div className=\"leading-relaxed text-gray-700\">\n {error && variant === \"error\" ? (\n <div className=\"space-y-3\">\n <p>{error.message}</p>\n {error.fields && error.fields.length > 0 && (\n <div>\n <p className=\"font-semibold text-gray-900\">\n Erreurs de champ:\n </p>\n <ul className=\"mt-2 space-y-1\">\n {error.fields.map((field, index) => (\n <li key={index} className=\"text-ews-error\">\n • {field.path}: {field.message}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ) : (\n children\n )}\n </div>\n </div>\n\n {/* Actions */}\n {(primaryAction || secondaryAction) && (\n <div className=\"flex justify-end items-center p-6 pt-0 space-x-3\">\n {secondaryAction && (\n <Button\n variant=\"outline\"\n onClick={onSecondaryAction || onClose}\n disabled={isLoading}\n >\n {secondaryAction}\n </Button>\n )}\n {primaryAction && (\n <Button\n variant={variant === \"error\" ? \"error\" : \"ews-primary\"}\n onClick={onPrimaryAction}\n loading={isLoading}\n >\n {primaryAction}\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Modal };\n","import { Pencil, Trash } from \"lucide-react\";\nimport React, { useEffect, useRef, useState } from \"react\";\n\nimport { cn } from \"../../utils\";\nimport { Modal } from \"../Modal/Modal\";\n\nexport interface ProfileImageUploadProps {\n /** Current image URL */\n imageUrl: string;\n /** Alt text for accessibility */\n altText: string;\n /** Disable editing */\n readOnly?: boolean;\n /** Avatar diameter */\n size?: \"sm\" | \"md\" | \"lg\";\n /**\n * Upload progress 0–100.\n * Progress bar is hidden when 0; auto-hides 1 s after reaching 100.\n */\n uploadProgress?: number;\n /**\n * When true the progress bar stays visible in an indeterminate (pulsing)\n * state for phases with no measurable progress (pre-upload / post-upload).\n * The bar auto-hides 1 s after both `isLoading` is false and progress reached 100.\n */\n isLoading?: boolean;\n /**\n * Whether to show the delete button.\n * Pass `false` when `imageUrl` is a default/fallback image.\n */\n showDeleteButton?: boolean;\n /** File input accept attribute (default: \"image/*\") */\n accept?: string;\n /** Max allowed file size in MB (default: 3) */\n maxFileSizeMB?: number;\n /** Called when a valid file is selected */\n onFileSelect: (file: File) => void;\n /** Called when the selected file exceeds `maxFileSizeMB` */\n onFileSizeExceeded?: () => void;\n /** Called when the user confirms deletion in the modal */\n onDeleteConfirm: () => void;\n /** Deletion confirmation modal — title text */\n deleteConfirmTitle: string;\n /** Deletion confirmation modal — body text */\n deleteConfirmMessage: string;\n /** Deletion confirmation modal — primary button label */\n deleteConfirmLabel: string;\n /** Deletion confirmation modal — secondary / cancel label */\n cancelLabel: string;\n}\n\nconst SIZE_CLASSES: Record<\"sm\" | \"md\" | \"lg\", string> = {\n sm: \"h-10 w-10\",\n md: \"h-16 w-16\",\n lg: \"h-32 w-32\",\n};\n\nconst INDICATOR_CLASSES: Record<\"sm\" | \"md\" | \"lg\", string> = {\n sm: \"h-2 w-2\",\n md: \"h-4 w-4\",\n lg: \"h-8 w-8\",\n};\n\nfunction UploadProgressBar({\n progress,\n isLoading,\n}: {\n progress: number;\n isLoading?: boolean;\n}) {\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (isLoading) {\n setVisible(true);\n return;\n }\n // isLoading just turned false\n if (progress >= 100) {\n setVisible(true);\n const t = setTimeout(() => setVisible(false), 1000);\n return () => clearTimeout(t);\n }\n // Legacy path (no isLoading prop): driven purely by progress\n if (progress > 0 && progress < 100) {\n setVisible(true);\n return;\n }\n setVisible(false);\n }, [progress, isLoading]);\n\n if (!visible) return null;\n\n const indeterminate = isLoading && progress === 0;\n\n return (\n <div className=\"mt-2 h-1.5 w-32 rounded-full bg-gray-200\">\n <div\n className={cn(\n \"h-full rounded-full bg-ews-primary transition-all duration-300\",\n indeterminate && \"animate-pulse\"\n )}\n style={{ width: indeterminate ? \"35%\" : `${progress}%` }}\n />\n </div>\n );\n}\n\nexport const ProfileImageUpload: React.FC<ProfileImageUploadProps> = ({\n imageUrl,\n altText,\n readOnly = false,\n size = \"lg\",\n uploadProgress = 0,\n isLoading = false,\n showDeleteButton = true,\n accept = \"image/*\",\n maxFileSizeMB = 3,\n onFileSelect,\n onFileSizeExceeded,\n onDeleteConfirm,\n deleteConfirmTitle,\n deleteConfirmMessage,\n deleteConfirmLabel,\n cancelLabel,\n}) => {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [isHovered, setIsHovered] = useState(false);\n const [showConfirm, setShowConfirm] = useState(false);\n\n const handleEditClick = () => fileInputRef.current?.click();\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n if (file.size > maxFileSizeMB * 1024 * 1024) {\n onFileSizeExceeded?.();\n e.target.value = \"\";\n return;\n }\n\n onFileSelect(file);\n e.target.value = \"\"; // allow re-selecting the same file\n };\n\n const handleConfirmDelete = () => {\n setShowConfirm(false);\n onDeleteConfirm();\n };\n\n return (\n <>\n <div className=\"inline-flex flex-col items-center\">\n <div\n className=\"relative\"\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <img\n src={imageUrl}\n alt={altText}\n className={cn(\n \"rounded-full border-4 border-white object-cover\",\n SIZE_CLASSES[size]\n )}\n />\n\n {/* Online status dot */}\n <div\n className={cn(\n \"absolute bottom-0 right-0 rounded-full border-4 border-white bg-green-400\",\n INDICATOR_CLASSES[size]\n )}\n />\n\n <input\n type=\"file\"\n ref={fileInputRef}\n accept={accept}\n className=\"hidden\"\n onChange={handleFileChange}\n />\n\n {isHovered && !readOnly && !isLoading && (\n <>\n {/* Edit / upload button */}\n <button\n type=\"button\"\n onClick={handleEditClick}\n className=\"absolute left-0 top-0 flex h-8 w-8 cursor-pointer items-center justify-center rounded-full bg-ews-primary transition-colors hover:bg-ews-secondary\"\n aria-label=\"Edit profile image\"\n >\n <Pencil className=\"h-4 w-4 text-white\" />\n </button>\n\n {/* Delete button — only when not a fallback/default image */}\n {showDeleteButton && (\n <button\n type=\"button\"\n onClick={() => setShowConfirm(true)}\n className=\"absolute left-0 top-10 flex h-8 w-8 cursor-pointer items-center justify-center rounded-full bg-red-600 transition-colors hover:bg-red-700\"\n aria-label=\"Delete profile image\"\n >\n <Trash className=\"h-4 w-4 text-white\" />\n </button>\n )}\n </>\n )}\n </div>\n\n <UploadProgressBar progress={uploadProgress} isLoading={isLoading} />\n </div>\n\n {/* Delete confirmation */}\n <Modal\n isOpen={showConfirm}\n onClose={() => setShowConfirm(false)}\n title={deleteConfirmTitle}\n variant=\"error\"\n size=\"sm\"\n primaryAction={deleteConfirmLabel}\n secondaryAction={cancelLabel}\n onPrimaryAction={handleConfirmDelete}\n onSecondaryAction={() => setShowConfirm(false)}\n >\n <p>{deleteConfirmMessage}</p>\n </Modal>\n </>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { Control, Controller, FieldValues, Path } from \"react-hook-form\";\nimport { cn } from \"../../utils\";\nimport { Input } from \"../Input\";\n\nexport interface DropdownMultiSelectProps<T extends FieldValues, TValue> {\n options: { value: TValue; label: string }[];\n name: Path<T>;\n control?: Control<T>;\n placeholder?: string;\n onChange?: (value: TValue[]) => void;\n value?: TValue[];\n defaultValue?: TValue[];\n onValidate?: (value: TValue[]) => boolean;\n disabled?: boolean;\n error?: string;\n label?: string;\n className?: string;\n searchPlaceholder?: string;\n}\n\nconst DropdownMultiSelect = <\n T extends FieldValues,\n TValue extends string | number | object\n>({\n options,\n name,\n control,\n placeholder = \"Select options\",\n searchPlaceholder = \"Search...\",\n onChange,\n value: controlledValue,\n defaultValue,\n onValidate,\n disabled = false,\n error,\n label,\n className,\n}: DropdownMultiSelectProps<T, TValue>) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [uncontrolledValue, setUncontrolledValue] = useState<\n TValue[] | undefined\n >(defaultValue);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const handleToggle = () => {\n if (!disabled) {\n setIsOpen(!isOpen);\n }\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchTerm(\"\");\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n const removeAccents = (str: string) =>\n str\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/ç/g, \"c\")\n .replace(/é|è|ê|ë/g, \"e\")\n .replace(/à|á|â|ã|ä/g, \"a\")\n .replace(/î|ï/g, \"i\")\n .replace(/ô|ö/g, \"o\")\n .replace(/ù|ú|û|ü/g, \"u\");\n\n const getDisplayValue = (value: TValue) => {\n if (typeof value === \"string\" || typeof value === \"number\") {\n return String(value);\n }\n return options.find((opt) => opt.value === value)?.label || \"\";\n };\n\n const filteredOptions = options.filter((option) =>\n removeAccents(option.label.toLowerCase()).includes(\n removeAccents(searchTerm.toLowerCase())\n )\n );\n\n const renderDropdown = ({\n value = [] as TValue[],\n onChange: fieldOnChange,\n }: {\n value: TValue[] | undefined;\n onChange: (value: TValue[]) => void;\n }) => (\n <div className={cn(\"relative\", className)} ref={dropdownRef}>\n <button\n type=\"button\"\n onClick={handleToggle}\n aria-label={name}\n disabled={disabled}\n className={cn(\n \"flex w-full items-center justify-between rounded-md border border-ews-gray-300 bg-white px-3 py-2 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-ews-primary focus:ring-offset-0 disabled:bg-ews-gray-50 disabled:text-ews-gray-500\",\n isOpen ? \"rounded-b-none border-b-0\" : \"rounded-md\",\n error && \"border-ews-error focus:ring-ews-error\"\n )}\n >\n <span className={cn(\"truncate\", !value?.length && \"text-ews-gray-500\")}>\n {value?.length > 0\n ? value.map((v) => getDisplayValue(v)).join(\", \")\n : placeholder}\n </span>\n <span\n className={cn(\n \"ml-2 w-4 h-4 transition-transform transform\",\n isOpen ? \"rotate-180\" : \"rotate-0\"\n )}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </span>\n </button>\n\n {isOpen && (\n <div className=\"absolute z-50 w-full bg-white rounded-b-md border border-t-0 shadow-lg border-ews-gray-300\">\n {/* Search Input */}\n <div className=\"p-2 border-b border-ews-gray-200\">\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"p-0 border-0 shadow-none focus:ring-0\"\n size=\"sm\"\n />\n </div>\n\n {/* Scrollable Options List */}\n <div className=\"overflow-y-auto max-h-48\">\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option) => (\n <div\n key={getDisplayValue(option.value)}\n className=\"flex items-center p-2 cursor-pointer hover:bg-ews-gray-100\"\n onClick={() => {\n const currentValue = value ?? [];\n const isSelected = currentValue.some(\n (item: TValue) =>\n JSON.stringify(item) === JSON.stringify(option.value)\n );\n const newValue = isSelected\n ? currentValue.filter(\n (item: TValue) =>\n JSON.stringify(item) !==\n JSON.stringify(option.value)\n )\n : [...currentValue, option.value];\n\n if (onValidate && !onValidate(newValue)) {\n return;\n }\n fieldOnChange(newValue);\n onChange?.(newValue);\n }}\n >\n <input\n type=\"checkbox\"\n checked={(value ?? []).some(\n (item: TValue) =>\n JSON.stringify(item) === JSON.stringify(option.value)\n )}\n onChange={(e) => {\n e.stopPropagation();\n const currentValue = value ?? [];\n const isSelected = currentValue.some(\n (item: TValue) =>\n JSON.stringify(item) === JSON.stringify(option.value)\n );\n const newValue = isSelected\n ? currentValue.filter(\n (item: TValue) =>\n JSON.stringify(item) !==\n JSON.stringify(option.value)\n )\n : [...currentValue, option.value];\n\n if (onValidate && !onValidate(newValue)) {\n return;\n }\n fieldOnChange(newValue);\n onChange?.(newValue);\n }}\n onClick={(e) => e.stopPropagation()}\n className=\"mr-3 w-4 h-4 rounded border-ews-gray-300 text-ews-primary focus:ring-ews-primary\"\n />\n <label className=\"text-sm cursor-pointer text-ews-gray-700\">\n {option.label}\n </label>\n </div>\n ))\n ) : (\n <div className=\"p-2 text-sm text-ews-gray-500\">\n No options found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n\n // Render controlled version with react-hook-form\n if (control) {\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { value, onChange } }) => (\n <div>\n {label && (\n <label className=\"block mb-1 text-sm font-medium text-ews-gray-700\">\n {label}\n </label>\n )}\n {renderDropdown({ value, onChange })}\n {error && <p className=\"mt-1 text-sm text-ews-error\">{error}</p>}\n </div>\n )}\n />\n );\n }\n\n // Render uncontrolled version\n return (\n <div>\n {label && (\n <label className=\"block mb-1 text-sm font-medium text-ews-gray-700\">\n {label}\n </label>\n )}\n {renderDropdown({\n value: controlledValue ?? uncontrolledValue,\n onChange: (newValue) => {\n if (controlledValue === undefined) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n },\n })}\n {error && <p className=\"mt-1 text-sm text-ews-error\">{error}</p>}\n </div>\n );\n};\n\nexport { DropdownMultiSelect };\n","import { cn } from \"../../utils\";\nimport type { LogoProps } from \"./Logo.types\";\n\nconst Logo = ({\n size = \"md\",\n showTagline: _showTagline = true,\n iconOnly = false,\n variant = \"normal\",\n className,\n onClick,\n customSrc,\n alt = \"MEDECINE 360 Logo\",\n clickable = false,\n}: LogoProps) => {\n const sizes = {\n sm: \"h-8\",\n md: \"h-12\",\n lg: \"h-16\",\n xl: \"h-24\",\n };\n\n const iconSizes = {\n sm: \"h-6 w-6\",\n md: \"h-8 w-8\",\n lg: \"h-12 w-12\",\n xl: \"h-16 w-16\",\n };\n\n // Get the appropriate logo image based on variant or custom source\n // For iconOnly, always use favicon.ico unless customSrc is provided\n const logoSrc =\n customSrc ||\n (iconOnly\n ? \"/favicon.ico\"\n : variant === \"white\"\n ? \"/image/logoWhite.png\"\n : variant === \"fullWhite\"\n ? \"/image/logoFullWhite.png\"\n : variant === \"favicon\"\n ? \"/favicon.ico\"\n : \"/image/logo.png\");\n\n const isClickable = clickable || !!onClick;\n\n if (iconOnly) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center\",\n iconSizes[size],\n isClickable && \"cursor-pointer\",\n className\n )}\n onClick={onClick}\n role={isClickable ? \"button\" : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={\n isClickable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n }\n : undefined\n }\n >\n <img\n src={logoSrc}\n alt={alt}\n className=\"object-contain w-full h-full\"\n onError={(e) => {\n // Fallback to favicon if image fails to load\n if (logoSrc !== \"/favicon.ico\") {\n (e.target as unknown as { src: string }).src = \"/favicon.ico\";\n }\n }}\n />\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex items-center\",\n sizes[size],\n isClickable && \"cursor-pointer\",\n className\n )}\n onClick={onClick}\n role={isClickable ? \"button\" : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onKeyDown={\n isClickable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick?.();\n }\n }\n : undefined\n }\n >\n {/* Logo Image */}\n <img\n src={logoSrc}\n alt={alt}\n className=\"object-contain w-auto h-full\"\n onError={(e) => {\n // Fallback to favicon if image fails to load\n if (logoSrc !== \"/favicon.ico\") {\n (e.target as unknown as { src: string }).src = \"/favicon.ico\";\n }\n }}\n />\n </div>\n );\n};\n\nexport type { LogoProps, LogoSize, LogoVariant } from \"./Logo.types\";\nexport { Logo };\n","import { ThemeConfig } from \"../types/theme\";\n\nexport const PROMED_THEME: ThemeConfig = {\n name: \"PROMED\",\n colors: {\n primary: \"#21596C\",\n secondary: \"#3BA1A1\",\n primaryHover: \"#1a4756\",\n secondaryHover: \"#308181\",\n primaryLight: \"#c0d0d4\",\n success: \"#059669\",\n successHover: \"#047857\",\n warning: \"#d97706\",\n warningHover: \"#b45309\",\n error: \"#dc2626\",\n errorHover: \"#b91c1c\",\n },\n};\n\nexport const MED_THEME: ThemeConfig = {\n name: \"MED\",\n colors: {\n primary: \"#3BA1A1\", // Teal for patients (calming, trustworthy)\n secondary: \"#6B73FF\", // Soft purple-blue (suggested secondary for MED)\n primaryHover: \"#308181\",\n secondaryHover: \"#5a61e6\",\n primaryLight: \"#a8d5d5\",\n success: \"#059669\",\n successHover: \"#047857\",\n warning: \"#d97706\",\n warningHover: \"#b45309\",\n error: \"#dc2626\",\n errorHover: \"#b91c1c\",\n },\n};\n\nexport const THEMES = {\n PROMED: PROMED_THEME,\n MED: MED_THEME,\n} as const;\n","import React, {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { Theme, ThemeContextType } from \"../types/theme\";\nimport { THEMES } from \"./themeConfig\";\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\ninterface ThemeProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n children,\n defaultTheme = \"PROMED\",\n}) => {\n const [theme, setTheme] = useState<Theme>(defaultTheme);\n const [themeConfig, setThemeConfig] = useState(THEMES[defaultTheme]);\n\n // Update theme config when theme changes\n useEffect(() => {\n setThemeConfig(THEMES[theme]);\n\n // Update data-theme attribute for CSS variable switching\n const root = document.documentElement;\n root.setAttribute(\"data-theme\", theme);\n\n // Also update CSS custom properties for backward compatibility\n const colors = THEMES[theme].colors;\n root.style.setProperty(\"--ews-primary\", colors.primary);\n root.style.setProperty(\"--ews-primary-hover\", colors.primaryHover);\n root.style.setProperty(\"--ews-primary-light\", colors.primaryLight);\n root.style.setProperty(\"--ews-secondary\", colors.secondary);\n root.style.setProperty(\"--ews-secondary-hover\", colors.secondaryHover);\n root.style.setProperty(\"--ews-success\", colors.success);\n root.style.setProperty(\"--ews-success-hover\", colors.successHover);\n root.style.setProperty(\"--ews-warning\", colors.warning);\n root.style.setProperty(\"--ews-warning-hover\", colors.warningHover);\n root.style.setProperty(\"--ews-error\", colors.error);\n root.style.setProperty(\"--ews-error-hover\", colors.errorHover);\n }, [theme]);\n\n const handleSetTheme = (newTheme: Theme) => {\n setTheme(newTheme);\n };\n\n const value: ThemeContextType = {\n theme,\n setTheme: handleSetTheme,\n themeConfig,\n };\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\n","import React from \"react\";\nimport { useTheme } from \"../../theme/ThemeProvider\";\nimport { Theme } from \"../../types/theme\";\n\nexport interface ThemeToggleProps {\n className?: string;\n}\n\nexport const ThemeToggle: React.FC<ThemeToggleProps> = ({ className }) => {\n const { theme, setTheme } = useTheme();\n\n const handleThemeChange = (newTheme: Theme) => {\n setTheme(newTheme);\n };\n\n return (\n <div className={`flex items-center space-x-2 ${className || \"\"}`}>\n <span className=\"text-sm font-medium text-gray-700\">Theme:</span>\n <div className=\"flex bg-gray-100 rounded-lg p-1\">\n <button\n onClick={() => handleThemeChange(\"PROMED\")}\n className={`px-3 py-1 text-xs font-medium rounded-md transition-colors ${\n theme === \"PROMED\"\n ? \"bg-ews-primary text-white\"\n : \"text-gray-600 hover:text-gray-900\"\n }`}\n >\n PROMED\n </button>\n <button\n onClick={() => handleThemeChange(\"MED\")}\n className={`px-3 py-1 text-xs font-medium rounded-md transition-colors ${\n theme === \"MED\"\n ? \"bg-ews-primary text-white\"\n : \"text-gray-600 hover:text-gray-900\"\n }`}\n >\n MED\n </button>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { useTheme } from \"../../theme/ThemeProvider\";\n\nexport interface ThemeDebuggerProps {\n className?: string;\n}\n\nexport const ThemeDebugger: React.FC<ThemeDebuggerProps> = ({\n className = \"\",\n}) => {\n const { theme, themeConfig, setTheme } = useTheme();\n\n const getComputedStyleValue = (property: string) => {\n if (typeof window !== \"undefined\") {\n return getComputedStyle(document.documentElement).getPropertyValue(\n property\n );\n }\n return \"N/A\";\n };\n\n return (\n <div className={`p-4 border rounded-lg bg-gray-50 ${className}`}>\n <h3 className=\"text-lg font-semibold mb-4\">Theme Debugger</h3>\n\n <div className=\"space-y-3\">\n <div>\n <strong>Current Theme:</strong> {theme}\n </div>\n\n <div>\n <strong>Theme Config:</strong>\n <pre className=\"text-xs bg-gray-100 p-2 rounded mt-1\">\n {JSON.stringify(themeConfig, null, 2)}\n </pre>\n </div>\n\n <div>\n <strong>CSS Variables:</strong>\n <div className=\"text-xs space-y-1 mt-1\">\n <div>--ews-primary: {getComputedStyleValue(\"--ews-primary\")}</div>\n <div>\n --ews-secondary: {getComputedStyleValue(\"--ews-secondary\")}\n </div>\n <div>\n --ews-primary-hover:{\" \"}\n {getComputedStyleValue(\"--ews-primary-hover\")}\n </div>\n <div>\n --ews-secondary-hover:{\" \"}\n {getComputedStyleValue(\"--ews-secondary-hover\")}\n </div>\n </div>\n </div>\n\n <div>\n <strong>Data Theme Attribute:</strong>{\" \"}\n {document.documentElement.getAttribute(\"data-theme\")}\n </div>\n\n <div className=\"flex space-x-2\">\n <button\n onClick={() => setTheme(\"PROMED\")}\n className={`px-3 py-1 text-xs rounded ${\n theme === \"PROMED\"\n ? \"bg-ews-primary text-white\"\n : \"bg-gray-200 text-gray-700\"\n }`}\n >\n PROMED\n </button>\n <button\n onClick={() => setTheme(\"MED\")}\n className={`px-3 py-1 text-xs rounded ${\n theme === \"MED\"\n ? \"bg-ews-primary text-white\"\n : \"bg-gray-200 text-gray-700\"\n }`}\n >\n MED\n </button>\n </div>\n\n <div className=\"grid grid-cols-2 gap-2 mt-4\">\n <div className=\"bg-ews-primary text-white p-2 rounded text-center\">\n Primary\n </div>\n <div className=\"bg-ews-secondary text-white p-2 rounded text-center\">\n Secondary\n </div>\n <div className=\"bg-ews-success text-white p-2 rounded text-center\">\n Success\n </div>\n <div className=\"bg-ews-warning text-white p-2 rounded text-center\">\n Warning\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { Stethoscope } from \"lucide-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { MultiSearchAutocomplete } from \"../../components/MultiSearchAutocomplete\";\nimport { cn } from \"../../utils\";\n\nexport interface Specialty {\n id: string;\n code: string;\n label: string;\n [key: string]: string | number | boolean | undefined;\n}\n\nexport interface SpecialtySearchAutocompleteProps {\n selectedSpecialties: Specialty[];\n onSpecialtiesChange: (specialties: Specialty[]) => void;\n specialties: Specialty[];\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n maxSelections?: number;\n showSelectedCount?: boolean;\n title?: string;\n label?: string;\n getSelectedCountText?: (count: number) => React.ReactNode;\n}\n\nexport const SpecialtySearchAutocomplete: React.FC<\n SpecialtySearchAutocompleteProps\n> = ({\n selectedSpecialties = [],\n onSpecialtiesChange,\n specialties: availableSpecialties,\n placeholder = \"Search and select medical specialties...\",\n className = \"\",\n disabled = false,\n maxSelections,\n showSelectedCount = true,\n title = \"Medical Specialties\",\n label = \"Select Specialties\",\n getSelectedCountText,\n}) => {\n const [filteredSpecialties, setFilteredSpecialties] = useState<Specialty[]>(\n []\n );\n const [isLoading, setIsLoading] = useState(false);\n\n // Filter specialties based on search term\n const fetchSpecialties = useCallback(\n async (searchTerm: string) => {\n setIsLoading(true);\n try {\n // Filter based on search term\n const filtered = availableSpecialties.filter(\n (specialty) =>\n specialty.label.toLowerCase().includes(searchTerm.toLowerCase()) ||\n specialty.code.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n setFilteredSpecialties(filtered);\n } catch (error) {\n console.error(\"Error filtering specialties:\", error);\n setFilteredSpecialties([]);\n } finally {\n setIsLoading(false);\n }\n },\n [availableSpecialties]\n );\n\n // Initial load\n useEffect(() => {\n fetchSpecialties(\"\");\n }, [fetchSpecialties]);\n\n const handleSelectionChange = useCallback(\n (items: Specialty[]) => {\n // Check max selections limit\n if (maxSelections && items.length > maxSelections) {\n return; // Don't update if exceeding max selections\n }\n onSpecialtiesChange(items);\n },\n [onSpecialtiesChange, maxSelections]\n );\n\n const getEntityById = useCallback(\n async (id: string): Promise<Specialty | undefined> => {\n return availableSpecialties.find((specialty) => specialty.id === id);\n },\n [availableSpecialties]\n );\n\n return (\n <div className={cn(\"space-y-3\", className)}>\n {/* Header with title and icon */}\n <div className=\"flex items-center space-x-2\">\n <div className=\"flex justify-center items-center w-8 h-8 rounded-lg bg-secondary-100\">\n <Stethoscope className=\"w-4 h-4 text-secondary-600\" />\n </div>\n <h3 className=\"text-lg font-semibold text-gray-900\">\n {title || \"Medical Specialties\"}\n </h3>\n </div>\n\n {/* Label */}\n <div>\n <label className=\"block mb-2 text-sm font-medium text-gray-700\">\n {label || \"Select Specialties\"}\n </label>\n </div>\n\n {/* MultiSearchAutocomplete component */}\n <MultiSearchAutocomplete<Specialty>\n items={filteredSpecialties}\n selectedItems={selectedSpecialties}\n onSelectionChange={handleSelectionChange}\n onSearch={fetchSpecialties}\n getEntityById={getEntityById}\n getPrimaryText={(specialty) => specialty.label}\n getSecondaryText={(specialty) => specialty.code}\n placeholder={placeholder}\n disabled={disabled}\n loading={isLoading}\n multiple={true}\n keepOpenOnSelect={true}\n className=\"w-full\"\n renderSelectedItem={(specialty) => (\n <span className=\"inline-flex items-center px-3 py-1 text-sm font-medium rounded-full border bg-ews-primary/10 text-ews-primary border-ews-primary/20\">\n {specialty.label}\n </span>\n )}\n renderListItem={(specialty, isSelected) => (\n <div className=\"flex items-center space-x-3\">\n <div\n className={cn(\n \"flex justify-center items-center w-5 h-5 rounded border-2\",\n isSelected\n ? \"bg-ews-primary border-ews-primary\"\n : \"border-ews-gray-300\"\n )}\n >\n {isSelected && (\n <svg\n className=\"w-3 h-3 text-white\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )}\n </div>\n <span\n className={cn(\n \"font-medium\",\n isSelected ? \"text-ews-primary\" : \"text-gray-900\"\n )}\n >\n {specialty.label}\n </span>\n </div>\n )}\n />\n\n {/* Selected count display */}\n {showSelectedCount && selectedSpecialties.length > 0 && (\n <div className=\"flex justify-between items-center text-sm text-gray-600\">\n <span>\n {getSelectedCountText\n ? getSelectedCountText(selectedSpecialties.length)\n : `${selectedSpecialties.length} specialty${\n selectedSpecialties.length !== 1 ? \"ies\" : \"\"\n } selected`}\n </span>\n {maxSelections && (\n <span className=\"text-gray-400\">\n {selectedSpecialties.length}/{maxSelections}\n </span>\n )}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_jsxs","_jsx","Icon","__iconNode","AlertCircle","AlertTriangle","CheckCircle","_Fragment"],"mappings":"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","x_google_ignoreList":[0,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,30]}
|