@algodomain/smart-forms 0.1.0 → 0.1.2
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/LICENSE +22 -0
- package/README.md +930 -165
- package/dist/{SmartFormProvider-B-BTl4wO.d.cts → SmartFormProvider-DyJoDBjQ.d.cts} +2 -0
- package/dist/{SmartFormProvider-B-BTl4wO.d.ts → SmartFormProvider-DyJoDBjQ.d.ts} +2 -0
- package/dist/{chunk-YV7RVYMD.cjs → chunk-4H5U5IHH.cjs} +78 -47
- package/dist/chunk-4H5U5IHH.cjs.map +1 -0
- package/dist/{chunk-IG4XDQMV.js → chunk-5LRBJEZW.js} +79 -48
- package/dist/chunk-5LRBJEZW.js.map +1 -0
- package/dist/{chunk-Y6NGPMDH.cjs → chunk-CJ55WKPC.cjs} +79 -79
- package/dist/{chunk-Y6NGPMDH.cjs.map → chunk-CJ55WKPC.cjs.map} +1 -1
- package/dist/{chunk-6WAEAWTD.js → chunk-KDPN4CHW.js} +3 -3
- package/dist/{chunk-6WAEAWTD.js.map → chunk-KDPN4CHW.js.map} +1 -1
- package/dist/fields.cjs +108 -108
- package/dist/fields.d.cts +1 -1
- package/dist/fields.d.ts +1 -1
- package/dist/fields.js +4 -4
- package/dist/index.cjs +32 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/opinionated.cjs +18 -18
- package/dist/opinionated.d.cts +1 -1
- package/dist/opinionated.d.ts +1 -1
- package/dist/opinionated.js +2 -2
- package/package.json +4 -2
- package/dist/chunk-IG4XDQMV.js.map +0 -1
- package/dist/chunk-YV7RVYMD.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/SmartFormProvider.tsx","../src/FieldDetectionHook.tsx","../src/lib/utils.ts","../src/components/ui/input.tsx","../src/components/ui/textarea.tsx","../src/components/ui/label.tsx","../src/components/ui/tooltip.tsx","../src/smart-fields/SmartInput.tsx"],"names":["createContext","useContext","jsx","useRef","useState","jsxs"],"mappings":"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","file":"chunk-5LRBJEZW.js","sourcesContent":["import React, { createContext, useContext, useState, useRef, useCallback, type ReactNode } from 'react';\nimport { z } from 'zod';\n\n// =============================================================================\n// FORM PROVIDER TYPES\n// =============================================================================\n\n/**\n * Authentication configuration for SmartForm\n * \n * @interface AuthenticationConfig\n * @property {boolean} enable - Enable authentication (sends Bearer token in Authorization header)\n * @property {string} [refreshTokenEndpoint] - Optional endpoint for token refresh when accessToken expires\n * @property {string} [accessTokenKey] - localStorage key for access token (default: 'accessToken')\n * @property {string} [refreshTokenKey] - localStorage key for refresh token (default: 'refreshToken')\n * \n * @example\n * ```typescript\n * // Basic authentication without token refresh\n * authentication={{ enable: true }}\n * \n * // Authentication with token refresh\n * authentication={{\n * enable: true,\n * refreshTokenEndpoint: \"/api/auth/refresh\"\n * }}\n * \n * // Custom token keys\n * authentication={{\n * enable: true,\n * refreshTokenEndpoint: \"/api/auth/refresh\",\n * accessTokenKey: \"myAccessToken\",\n * refreshTokenKey: \"myRefreshToken\"\n * }}\n * ```\n */\nexport interface AuthenticationConfig {\n enable: boolean;\n refreshTokenEndpoint?: string; // Optional endpoint for token refresh when accessToken expires\n accessTokenKey?: string; // localStorage key for access token (default: 'accessToken')\n refreshTokenKey?: string; // localStorage key for refresh token (default: 'refreshToken')\n}\n\nexport interface FormConfig {\n showProgressBar?: any;\n api?: string;\n method?: 'POST' | 'PUT' | 'PATCH'; // HTTP method for form submission\n submitButtonText?: string;\n submitButtonIcon?: ReactNode;\n allowSaveDraft?: boolean;\n saveDraftApi?: string;\n onSuccess?: (data: any) => void;\n onError?: (error: any) => void;\n transformData?: (data: any) => any; // Transform data before submission\n className?: string;\n title?: string;\n subTitle?: string; // Optional subtitle displayed under the title\n storageKey?: string; // Key for localStorage persistence\n enableLocalStorage?: boolean; // Enable/disable localStorage\n logFormData?: boolean; // Enable/disable console logging of form data\n showReset?: boolean; // Show reset button regardless of localStorage setting\n showTabNumbers?: boolean; // Show tab numbers in tab headers\n authentication?: AuthenticationConfig; // Authentication configuration\n includeQueryParams?: boolean; // Include URL query parameters in form submission (default: false)\n queryParamsToInclude?: string[]; // Optional array of specific query param names to include\n}\n\nexport interface FormContextType {\n formData: any;\n errors: any;\n isLoading: boolean;\n isDraftSaving: boolean;\n updateField: (field: string, value: any) => void;\n validateField: (field: string, value: any) => boolean;\n validateFields: (fields: string[]) => boolean;\n submitForm: () => Promise<void>;\n validateFormAndGetResult: () => boolean;\n saveDraft: () => Promise<void>;\n resetForm: () => void;\n fieldRefs: React.MutableRefObject<any>;\n registerValidation: (field: string, validation: any) => void;\n validationRegistry: any;\n config: FormConfig;\n setErrors: (errors: any) => void;\n registerSubmitHook: (key: string, hook: () => Promise<void>) => void;\n unregisterSubmitHook: (key: string) => void;\n}\n\n// =============================================================================\n// FORM CONTEXT\n// =============================================================================\n\nconst FormContext = createContext<FormContextType | null>(null);\n\n// =============================================================================\n// FORM PROVIDER COMPONENT\n// =============================================================================\n\nexport interface SmartFormProviderProps {\n children: ReactNode;\n config: FormConfig;\n initialData?: any;\n}\n\nexport const SmartFormProvider: React.FC<SmartFormProviderProps> = ({\n children,\n config,\n initialData = {}\n}) => {\n // Helper function to extract query parameters from URL\n const getQueryParams = useCallback((allowedParams?: string[]): Record<string, any> => {\n const params = new URLSearchParams(window.location.search);\n const result: Record<string, any> = {};\n \n if (allowedParams && allowedParams.length > 0) {\n // Only include specified params\n allowedParams.forEach(key => {\n const value = params.get(key);\n if (value !== null) {\n result[key] = value;\n }\n });\n } else {\n // Include all params\n params.forEach((value, key) => {\n result[key] = value;\n });\n }\n \n return result;\n }, []);\n\n // Helper functions for localStorage\n const getStorageKey = () => {\n return config.storageKey || 'smart-form-data';\n };\n\n const loadFromStorage = () => {\n if (!config.enableLocalStorage) return initialData;\n\n try {\n const stored = localStorage.getItem(getStorageKey());\n if (stored) {\n const parsedStored = JSON.parse(stored);\n // Merge stored data with initialData\n // For each field: use stored value if it's not empty/null, otherwise use initialData value\n const merged = { ...initialData };\n Object.keys(parsedStored).forEach((key) => {\n const storedValue = parsedStored[key];\n // Only use stored value if it's not null, undefined, or empty string\n if (storedValue !== null && storedValue !== undefined && storedValue !== '') {\n merged[key] = storedValue;\n }\n });\n return merged;\n }\n return initialData;\n } catch (error) {\n console.warn('Failed to load form data from localStorage:', error);\n return initialData;\n }\n };\n\n const saveToStorage = (data: any) => {\n if (!config.enableLocalStorage) return;\n\n try {\n localStorage.setItem(getStorageKey(), JSON.stringify(data));\n } catch (error) {\n console.warn('Failed to save form data to localStorage:', error);\n }\n };\n\n const clearStorage = () => {\n if (!config.enableLocalStorage) return;\n\n try {\n localStorage.removeItem(getStorageKey());\n } catch (error) {\n console.warn('Failed to clear form data from localStorage:', error);\n }\n };\n\n const [formData, setFormData] = useState(loadFromStorage);\n const [errors, setErrors] = useState<any>({});\n const [isLoading, setIsLoading] = useState(false);\n const [isDraftSaving, setIsDraftSaving] = useState(false);\n const [validationRegistry, setValidationRegistry] = useState<any>({});\n const fieldRefs = useRef<any>({});\n const submitHooksRef = useRef<Map<string, () => Promise<void>>>(new Map());\n\n // Update form field\n const updateField = useCallback((field: string, value: any) => {\n setFormData((prev: any) => {\n const newData = {\n ...prev,\n [field]: value\n };\n // Save to localStorage after state update\n setTimeout(() => saveToStorage(newData), 0);\n return newData;\n });\n\n // Clear error when user starts typing\n if (errors[field]) {\n setErrors((prev: any) => {\n const newErrors = { ...prev };\n delete newErrors[field];\n return newErrors;\n });\n }\n }, [errors, config.enableLocalStorage, saveToStorage]);\n\n // Validate single field\n const validateField = useCallback((field: string, value: any) => {\n const validation = validationRegistry[field];\n if (!validation) return true;\n\n try {\n validation.parse(value);\n return true;\n } catch (error) {\n if (error instanceof z.ZodError) {\n setErrors((prev: any) => ({\n ...prev,\n [field]: error.issues[0]?.message || `Invalid ${field}`\n }));\n return false;\n }\n return false;\n }\n }, [validationRegistry]);\n\n // Register validation for a field\n const registerValidation = useCallback((field: string, validation: any) => {\n setValidationRegistry((prev: any) => ({\n ...prev,\n [field]: validation\n }));\n }, []);\n\n // Validate all fields\n const validateAllFields = useCallback(() => {\n const allErrors: any = {};\n let isValid = true;\n\n for (const [field, validation] of Object.entries(validationRegistry)) {\n if (validation && typeof (validation as any).parse === 'function') {\n try {\n (validation as any).parse(formData[field]);\n } catch (error) {\n if (error instanceof z.ZodError) {\n allErrors[field] = error.issues[0]?.message || `Invalid ${field}`;\n isValid = false;\n }\n }\n }\n }\n\n setErrors(allErrors);\n return isValid;\n }, [formData, validationRegistry]);\n\n // Validate specific fields (for tab validation)\n const validateFields = useCallback((fields: string[]) => {\n const allErrors: any = {};\n let isValid = true;\n\n for (const field of fields) {\n const validation = validationRegistry[field];\n if (validation) {\n try {\n validation.parse(formData[field]);\n } catch (error) {\n if (error instanceof z.ZodError) {\n allErrors[field] = error.issues[0]?.message || `Invalid ${field}`;\n isValid = false;\n }\n }\n }\n }\n\n // Only update errors for the fields being validated\n setErrors((prev: any) => ({\n ...prev,\n ...allErrors\n }));\n\n return isValid;\n }, [formData, validationRegistry]);\n\n // Submit form\n const submitForm = useCallback(async () => {\n if (!validateAllFields()) {\n return;\n }\n\n if (!config.api) {\n console.warn('No API endpoint provided');\n return;\n }\n\n // Merge query params with form data if enabled\n let dataToSubmit = formData;\n if (config.includeQueryParams) {\n const queryParams = getQueryParams(config.queryParamsToInclude);\n // Form data overrides query params in case of conflicts\n dataToSubmit = { ...queryParams, ...formData };\n }\n\n // Log form data if enabled\n if (config.logFormData) {\n console.log('📤 Submitting form data:', dataToSubmit);\n console.log('🎯 API endpoint:', config.api);\n }\n\n // Build a JSON-safe payload: replace File(s) with filename(s), Dates with ISO\n const toJsonSafe = (val: any): any => {\n if (val instanceof File) return val.name;\n if (val instanceof Date) return val.toISOString();\n if (Array.isArray(val)) {\n return val.map((item) => (item instanceof File ? item.name : toJsonSafe(item)));\n }\n if (val && typeof val === 'object') {\n // shallow map object values\n const out: any = {};\n for (const [k, v] of Object.entries(val)) out[k] = toJsonSafe(v);\n return out;\n }\n return val;\n };\n\n let jsonPayload = toJsonSafe(dataToSubmit);\n \n // Apply transformation if provided\n if (config.transformData) {\n jsonPayload = config.transformData(jsonPayload);\n }\n\n setIsLoading(true);\n try {\n // Prepare headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add Authorization header if authentication is enabled and token exists\n if (config.authentication?.enable) {\n const { accessTokenKey = 'accessToken' } = config.authentication;\n const token = localStorage.getItem(accessTokenKey);\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n }\n\n // Prepare fetch options\n const fetchOptions: RequestInit = {\n method: config.method || 'POST',\n headers,\n body: JSON.stringify(jsonPayload),\n };\n\n // Add credentials if authentication is enabled\n if (config.authentication?.enable) {\n fetchOptions.credentials = 'include';\n }\n\n let response = await fetch(config.api, fetchOptions);\n\n // Handle token expiration with automatic refresh\n if (response.status === 403 && config.authentication?.enable && config.authentication.refreshTokenEndpoint) {\n const newAccessToken = await refreshAccessToken(config.authentication);\n \n if (newAccessToken) {\n // Retry the request with the new token\n headers.Authorization = `Bearer ${newAccessToken}`;\n response = await fetch(config.api, {\n ...fetchOptions,\n headers,\n });\n }\n }\n\n // Parse response body (JSON or text)\n let responseBody;\n try {\n responseBody = await response.json();\n } catch {\n responseBody = await response.text();\n }\n\n const responseData = {\n status: response.status,\n statusText: response.statusText,\n body: responseBody\n };\n\n // Check if response is successful (2xx status codes)\n if (response.status >= 200 && response.status < 300) {\n if (config.onSuccess) {\n config.onSuccess(responseData);\n }\n\n // After successful submit, run any registered submit hooks (e.g., file uploads)\n for (const hook of submitHooksRef.current.values()) {\n try {\n // eslint-disable-next-line no-await-in-loop\n await hook();\n } catch (hookError) {\n console.error('Submit hook error:', hookError);\n }\n }\n } else {\n // Handle error response\n if (config.onError) {\n config.onError(responseData);\n }\n }\n } catch (error: any) {\n // Handle network errors or other fetch failures\n if (config.onError) {\n config.onError({\n status: 0,\n statusText: 'Network Error',\n body: error.message || 'An error occurred'\n });\n }\n console.error('Form submission error:', error);\n } finally {\n setIsLoading(false);\n }\n }, [formData, config, validateAllFields, getQueryParams]);\n\n // Validate form and return validation result\n const validateFormAndGetResult = useCallback(() => {\n return validateAllFields();\n }, [validateAllFields]);\n\n /**\n * Helper function to refresh access token\n * This function handles token refresh internally and is reusable across projects\n * \n * @param authConfig - The authentication configuration object\n * @returns Promise<string | null> - New access token or null if refresh failed\n */\n const refreshAccessToken = useCallback(async (authConfig: AuthenticationConfig): Promise<string | null> => {\n const { refreshTokenEndpoint, accessTokenKey = 'accessToken', refreshTokenKey = 'refreshToken' } = authConfig;\n \n if (!refreshTokenEndpoint) {\n throw new Error('Refresh token endpoint not provided');\n }\n \n try {\n const refreshToken = localStorage.getItem(refreshTokenKey);\n if (!refreshToken) {\n throw new Error('No refresh token available');\n }\n\n const response = await fetch(refreshTokenEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ refreshToken }),\n });\n\n if (!response.ok) {\n throw new Error(`Token refresh failed: ${response.status}`);\n }\n\n const result = await response.json();\n // Support different response formats: { data: { accessToken } } or { accessToken }\n const newAccessToken = result.data?.accessToken || result.accessToken;\n \n if (newAccessToken) {\n localStorage.setItem(accessTokenKey, newAccessToken);\n return newAccessToken;\n }\n \n throw new Error('No access token in refresh response');\n } catch (error) {\n console.error('Token refresh failed:', error);\n // Clear tokens on refresh failure to prevent infinite retry loops\n localStorage.removeItem(accessTokenKey);\n localStorage.removeItem(refreshTokenKey);\n return null;\n }\n }, []);\n\n // Save draft\n const saveDraft = useCallback(async () => {\n if (!config.saveDraftApi) {\n console.warn('No save draft API endpoint provided');\n return;\n }\n\n // Merge query params with form data if enabled\n let dataToSave = formData;\n if (config.includeQueryParams) {\n const queryParams = getQueryParams(config.queryParamsToInclude);\n // Form data overrides query params in case of conflicts\n dataToSave = { ...queryParams, ...formData };\n }\n\n // Log form data if enabled\n if (config.logFormData) {\n console.log('💾 Saving draft data:', dataToSave);\n console.log('🎯 Draft API endpoint:', config.saveDraftApi);\n }\n\n setIsDraftSaving(true);\n try {\n // Prepare headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add Authorization header if authentication is enabled and token exists\n if (config.authentication?.enable) {\n const { accessTokenKey = 'accessToken' } = config.authentication;\n const token = localStorage.getItem(accessTokenKey);\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n }\n\n // Prepare fetch options\n const fetchOptions: RequestInit = {\n method: 'POST',\n headers,\n body: JSON.stringify(dataToSave),\n };\n\n // Add credentials if authentication is enabled\n if (config.authentication?.enable) {\n fetchOptions.credentials = 'include';\n }\n\n let response = await fetch(config.saveDraftApi, fetchOptions);\n\n // Handle token expiration with automatic refresh\n if (response.status === 403 && config.authentication?.enable && config.authentication.refreshTokenEndpoint) {\n const newAccessToken = await refreshAccessToken(config.authentication);\n \n if (newAccessToken) {\n // Retry the request with the new token\n headers.Authorization = `Bearer ${newAccessToken}`;\n response = await fetch(config.saveDraftApi, {\n ...fetchOptions,\n headers,\n });\n }\n }\n\n // Parse response body (JSON or text)\n let responseBody;\n try {\n responseBody = await response.json();\n } catch {\n responseBody = await response.text();\n }\n\n // Check if response is successful (2xx status codes)\n if (response.status >= 200 && response.status < 300) {\n console.log('Draft saved successfully:', responseBody);\n } else {\n console.error('Draft save failed:', {\n status: response.status,\n statusText: response.statusText,\n body: responseBody\n });\n }\n } catch (error) {\n console.error('Draft save error:', error);\n } finally {\n setIsDraftSaving(false);\n }\n }, [formData, config, getQueryParams]);\n\n // Reset form and clear localStorage\n const resetForm = useCallback(() => {\n setFormData(initialData);\n setErrors({});\n clearStorage();\n }, [initialData, config.enableLocalStorage, clearStorage]);\n\n const contextValue: FormContextType = {\n formData,\n errors,\n isLoading,\n isDraftSaving,\n updateField,\n validateField,\n validateFields,\n submitForm,\n validateFormAndGetResult,\n saveDraft,\n resetForm,\n fieldRefs,\n registerValidation,\n validationRegistry,\n config,\n setErrors,\n registerSubmitHook: (key: string, hook: () => Promise<void>) => {\n submitHooksRef.current.set(key, hook);\n },\n unregisterSubmitHook: (key: string) => {\n submitHooksRef.current.delete(key);\n }\n };\n\n return (\n <FormContext.Provider value={contextValue}>\n {children}\n </FormContext.Provider>\n );\n};\n\n// =============================================================================\n// FORM HOOKS\n// =============================================================================\n\nexport const useSmartForm = () => {\n const context = useContext(FormContext);\n if (!context) {\n throw new Error('useSmartForm must be used within a SmartFormProvider');\n }\n return context;\n};\n\nexport const useFormField = (field: string) => {\n const { formData, errors, updateField, fieldRefs, registerValidation } = useSmartForm();\n\n return {\n value: formData[field],\n error: errors[field],\n onChange: (value: any) => updateField(field, value),\n fieldRef: (el: any) => fieldRefs.current[field] = el,\n registerValidation\n };\n};\n","import { createContext, useContext } from 'react';\n\nexport interface FieldDetectionContextType {\n registerField: (fieldName: string) => void;\n}\n\nexport const FieldDetectionContext = createContext<FieldDetectionContextType | null>(null);\n\nexport const useFieldDetection = () => {\n const context = useContext(FieldDetectionContext);\n return context; // Return null if not in context (for backward compatibility)\n};\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useFormField } from '../SmartFormProvider';\nimport { useFieldDetection } from '../FieldDetectionHook';\nimport { Input } from '../components/ui/input';\nimport { Textarea } from '../components/ui/textarea';\nimport { Label } from '../components/ui/label';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../components/ui/tooltip';\nimport { EyeIcon, EyeOffIcon, InfoIcon } from 'lucide-react';\n\n// =============================================================================\n// SMART FORM INPUT TYPES\n// =============================================================================\n\nexport interface SmartInputProps {\n field: string;\n label?: string;\n type?: 'text' | 'email' | 'password' | 'tel' | 'number' | 'textarea';\n placeholder?: string;\n validation?: any; // Zod schema\n className?: string;\n required?: boolean;\n defaultValue?: any; // Default value for the field\n info?: string; // Info text to show on hover of info icon\n subLabel?: string; // Additional label text shown below the main label\n}\n\n// =============================================================================\n// SMART FORM INPUT COMPONENT\n// =============================================================================\n\nexport const SmartInput: React.FC<SmartInputProps> = ({\n field,\n label,\n type = 'text',\n placeholder,\n validation,\n className = '',\n required = false,\n defaultValue,\n info,\n subLabel\n}) => {\n const { value, error, onChange, fieldRef, registerValidation } = useFormField(field);\n const fieldDetection = useFieldDetection();\n const hasRegistered = useRef(false);\n const hasSetDefault = useRef(false);\n const [showPassword, setShowPassword] = useState(false);\n\n const togglePasswordVisibility = () => {\n setShowPassword(!showPassword);\n };\n\n // Register validation for this field\n useEffect(() => {\n if (validation && !hasRegistered.current) {\n hasRegistered.current = true;\n registerValidation(field, validation);\n }\n }, [validation, field, registerValidation]);\n\n // Auto-register field if in field detection context\n useEffect(() => {\n if (fieldDetection?.registerField) {\n fieldDetection.registerField(field);\n }\n }, [field, fieldDetection]);\n\n // Set default value if provided and field is empty\n useEffect(() => {\n if (defaultValue !== undefined && !hasSetDefault.current && (value === undefined || value === null || value === '')) {\n onChange(defaultValue);\n hasSetDefault.current = true;\n }\n }, [defaultValue, value, onChange]);\n\n // Generate placeholder text\n const getPlaceholder = () => {\n if (placeholder) return placeholder;\n if (!label) return `Enter ${field}`;\n if (type === 'email') return `Enter ${label.toLowerCase()}`;\n if (type === 'tel') return `Enter ${label.toLowerCase()}`;\n return `Enter ${label.toLowerCase()}`;\n };\n\n const renderInput = () => {\n switch (type) {\n case 'textarea':\n return (\n <Textarea\n ref={fieldRef}\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n className={`w-full ${error ? 'border-destructive' : ''} ${className}`}\n placeholder={getPlaceholder()}\n rows={4}\n data-field={field}\n />\n );\n\n case 'password':\n return (\n <div className=\"relative\">\n <Input\n ref={fieldRef}\n type={showPassword ? \"text\" : \"password\"}\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n className={`w-full pr-10 ${error ? 'border-destructive' : ''} ${className}`}\n placeholder={getPlaceholder()}\n data-field={field}\n />\n <button \n type=\"button\"\n onClick={togglePasswordVisibility}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 p-1 hover:bg-gray-100 rounded transition-colors\"\n >\n {showPassword ? (\n <EyeOffIcon className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <EyeIcon className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n </div>\n );\n\n default:\n return (\n <Input\n ref={fieldRef}\n type={type}\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n className={`w-full ${error ? 'border-destructive' : ''} ${className}`}\n placeholder={getPlaceholder()}\n data-field={field}\n />\n );\n }\n };\n\n return (\n <div className={`flex-1 min-w-0 ${className}`}>\n {label && (\n <div className=\"mb-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-medium text-foreground\">\n {label} {required && <span className=\"text-destructive\">*</span>}\n </Label>\n {info && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <InfoIcon className=\"h-4 w-4 text-muted-foreground cursor-pointer mr-2\" />\n </TooltipTrigger>\n <TooltipContent>\n <p className=\"max-w-xs\">{info}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n </div>\n {subLabel && (\n <p className=\"text-xs text-muted-foreground mt-1\">{subLabel}</p>\n )}\n </div>\n )}\n {renderInput()}\n {error && (\n <p className=\"text-destructive text-sm mt-1\">{error}</p>\n )}\n </div>\n );\n};"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk4H5U5IHH_cjs = require('./chunk-4H5U5IHH.cjs');
|
|
4
4
|
var React4 = require('react');
|
|
5
5
|
var CheckboxPrimitive = require('@radix-ui/react-checkbox');
|
|
6
6
|
var lucideReact = require('lucide-react');
|
|
@@ -45,7 +45,7 @@ function Checkbox({
|
|
|
45
45
|
CheckboxPrimitive__namespace.Root,
|
|
46
46
|
{
|
|
47
47
|
"data-slot": "checkbox",
|
|
48
|
-
className:
|
|
48
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
49
49
|
"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
|
|
50
50
|
className
|
|
51
51
|
),
|
|
@@ -71,8 +71,8 @@ var SmartCheckbox = ({
|
|
|
71
71
|
info,
|
|
72
72
|
subLabel
|
|
73
73
|
}) => {
|
|
74
|
-
const { value, error, onChange, fieldRef, registerValidation } =
|
|
75
|
-
const fieldDetection =
|
|
74
|
+
const { value, error, onChange, fieldRef, registerValidation } = chunk4H5U5IHH_cjs.useFormField(field);
|
|
75
|
+
const fieldDetection = chunk4H5U5IHH_cjs.useFieldDetection();
|
|
76
76
|
const hasRegistered = React4.useRef(false);
|
|
77
77
|
const hasSetDefault = React4.useRef(false);
|
|
78
78
|
React4.useEffect(() => {
|
|
@@ -107,15 +107,15 @@ var SmartCheckbox = ({
|
|
|
107
107
|
id: `${field}-checkbox`
|
|
108
108
|
}
|
|
109
109
|
),
|
|
110
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Label, { htmlFor: `${field}-checkbox`, className: "text-sm font-normal cursor-pointer", children: [
|
|
111
111
|
label || field,
|
|
112
112
|
" ",
|
|
113
113
|
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-destructive", children: "*" })
|
|
114
114
|
] })
|
|
115
115
|
] }),
|
|
116
|
-
info && /* @__PURE__ */ jsxRuntime.jsx(
|
|
117
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
118
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
116
|
+
info && /* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Tooltip, { children: [
|
|
117
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.InfoIcon, { className: "h-4 w-4 text-muted-foreground cursor-pointer mr-2" }) }),
|
|
118
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "max-w-xs", children: info }) })
|
|
119
119
|
] }) })
|
|
120
120
|
] }),
|
|
121
121
|
subLabel && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground ml-6", children: subLabel })
|
|
@@ -131,7 +131,7 @@ function RadioGroup({
|
|
|
131
131
|
RadioGroupPrimitive__namespace.Root,
|
|
132
132
|
{
|
|
133
133
|
"data-slot": "radio-group",
|
|
134
|
-
className:
|
|
134
|
+
className: chunk4H5U5IHH_cjs.cn("grid gap-3", className),
|
|
135
135
|
...props
|
|
136
136
|
}
|
|
137
137
|
);
|
|
@@ -144,7 +144,7 @@ function RadioGroupItem({
|
|
|
144
144
|
RadioGroupPrimitive__namespace.Item,
|
|
145
145
|
{
|
|
146
146
|
"data-slot": "radio-group-item",
|
|
147
|
-
className:
|
|
147
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
148
148
|
"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
|
|
149
149
|
className
|
|
150
150
|
),
|
|
@@ -173,8 +173,8 @@ var SmartRadioGroup = ({
|
|
|
173
173
|
info,
|
|
174
174
|
subLabel
|
|
175
175
|
}) => {
|
|
176
|
-
const { value, error, onChange, fieldRef, registerValidation } =
|
|
177
|
-
const fieldDetection =
|
|
176
|
+
const { value, error, onChange, fieldRef, registerValidation } = chunk4H5U5IHH_cjs.useFormField(field);
|
|
177
|
+
const fieldDetection = chunk4H5U5IHH_cjs.useFieldDetection();
|
|
178
178
|
const hasRegistered = React4.useRef(false);
|
|
179
179
|
const hasSetDefault = React4.useRef(false);
|
|
180
180
|
React4.useEffect(() => {
|
|
@@ -197,14 +197,14 @@ var SmartRadioGroup = ({
|
|
|
197
197
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex-1 min-w-0 ${className}`, children: [
|
|
198
198
|
label && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2", children: [
|
|
199
199
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
200
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
200
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Label, { className: "text-sm font-medium text-foreground", children: [
|
|
201
201
|
label,
|
|
202
202
|
" ",
|
|
203
203
|
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-destructive", children: "*" })
|
|
204
204
|
] }),
|
|
205
|
-
info && /* @__PURE__ */ jsxRuntime.jsx(
|
|
206
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
207
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
205
|
+
info && /* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Tooltip, { children: [
|
|
206
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.InfoIcon, { className: "h-4 w-4 text-muted-foreground cursor-pointer mr-2" }) }),
|
|
207
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "max-w-xs", children: info }) })
|
|
208
208
|
] }) })
|
|
209
209
|
] }),
|
|
210
210
|
subLabel && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: subLabel })
|
|
@@ -227,7 +227,7 @@ var SmartRadioGroup = ({
|
|
|
227
227
|
}
|
|
228
228
|
),
|
|
229
229
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
230
|
-
|
|
230
|
+
chunk4H5U5IHH_cjs.Label,
|
|
231
231
|
{
|
|
232
232
|
htmlFor: `${field}-${option.value}`,
|
|
233
233
|
className: "text-sm font-normal cursor-pointer",
|
|
@@ -261,7 +261,7 @@ function SelectTrigger({
|
|
|
261
261
|
{
|
|
262
262
|
"data-slot": "select-trigger",
|
|
263
263
|
"data-size": size,
|
|
264
|
-
className:
|
|
264
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
265
265
|
"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
266
266
|
className
|
|
267
267
|
),
|
|
@@ -283,7 +283,7 @@ function SelectContent({
|
|
|
283
283
|
SelectPrimitive__namespace.Content,
|
|
284
284
|
{
|
|
285
285
|
"data-slot": "select-content",
|
|
286
|
-
className:
|
|
286
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
287
287
|
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
|
|
288
288
|
position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
289
289
|
className
|
|
@@ -295,7 +295,7 @@ function SelectContent({
|
|
|
295
295
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
296
296
|
SelectPrimitive__namespace.Viewport,
|
|
297
297
|
{
|
|
298
|
-
className:
|
|
298
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
299
299
|
"p-1",
|
|
300
300
|
position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
|
|
301
301
|
),
|
|
@@ -316,7 +316,7 @@ function SelectItem({
|
|
|
316
316
|
SelectPrimitive__namespace.Item,
|
|
317
317
|
{
|
|
318
318
|
"data-slot": "select-item",
|
|
319
|
-
className:
|
|
319
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
320
320
|
"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
|
|
321
321
|
className
|
|
322
322
|
),
|
|
@@ -336,7 +336,7 @@ function SelectScrollUpButton({
|
|
|
336
336
|
SelectPrimitive__namespace.ScrollUpButton,
|
|
337
337
|
{
|
|
338
338
|
"data-slot": "select-scroll-up-button",
|
|
339
|
-
className:
|
|
339
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
340
340
|
"flex cursor-default items-center justify-center py-1",
|
|
341
341
|
className
|
|
342
342
|
),
|
|
@@ -353,7 +353,7 @@ function SelectScrollDownButton({
|
|
|
353
353
|
SelectPrimitive__namespace.ScrollDownButton,
|
|
354
354
|
{
|
|
355
355
|
"data-slot": "select-scroll-down-button",
|
|
356
|
-
className:
|
|
356
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
357
357
|
"flex cursor-default items-center justify-center py-1",
|
|
358
358
|
className
|
|
359
359
|
),
|
|
@@ -374,8 +374,8 @@ var SmartSelect = ({
|
|
|
374
374
|
info,
|
|
375
375
|
subLabel
|
|
376
376
|
}) => {
|
|
377
|
-
const { value, error, onChange, fieldRef, registerValidation } =
|
|
378
|
-
const fieldDetection =
|
|
377
|
+
const { value, error, onChange, fieldRef, registerValidation } = chunk4H5U5IHH_cjs.useFormField(field);
|
|
378
|
+
const fieldDetection = chunk4H5U5IHH_cjs.useFieldDetection();
|
|
379
379
|
const hasRegistered = React4.useRef(false);
|
|
380
380
|
const hasSetDefault = React4.useRef(false);
|
|
381
381
|
React4.useEffect(() => {
|
|
@@ -398,14 +398,14 @@ var SmartSelect = ({
|
|
|
398
398
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex-1 min-w-0 ${className}`, children: [
|
|
399
399
|
label && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2", children: [
|
|
400
400
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
401
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
401
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Label, { className: "text-sm font-medium text-foreground", children: [
|
|
402
402
|
label,
|
|
403
403
|
" ",
|
|
404
404
|
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-destructive", children: "*" })
|
|
405
405
|
] }),
|
|
406
|
-
info && /* @__PURE__ */ jsxRuntime.jsx(
|
|
407
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
408
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
406
|
+
info && /* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Tooltip, { children: [
|
|
407
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.InfoIcon, { className: "h-4 w-4 text-muted-foreground cursor-pointer mr-2" }) }),
|
|
408
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "max-w-xs", children: info }) })
|
|
409
409
|
] }) })
|
|
410
410
|
] }),
|
|
411
411
|
subLabel && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: subLabel })
|
|
@@ -469,7 +469,7 @@ function Button({
|
|
|
469
469
|
Comp,
|
|
470
470
|
{
|
|
471
471
|
"data-slot": "button",
|
|
472
|
-
className:
|
|
472
|
+
className: chunk4H5U5IHH_cjs.cn(buttonVariants({ variant, size, className })),
|
|
473
473
|
...props
|
|
474
474
|
}
|
|
475
475
|
);
|
|
@@ -489,7 +489,7 @@ function Calendar({
|
|
|
489
489
|
reactDayPicker.DayPicker,
|
|
490
490
|
{
|
|
491
491
|
showOutsideDays,
|
|
492
|
-
className:
|
|
492
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
493
493
|
"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
|
|
494
494
|
String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
|
|
495
495
|
String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
|
|
@@ -501,85 +501,85 @@ function Calendar({
|
|
|
501
501
|
...formatters
|
|
502
502
|
},
|
|
503
503
|
classNames: {
|
|
504
|
-
root:
|
|
505
|
-
months:
|
|
504
|
+
root: chunk4H5U5IHH_cjs.cn("w-fit", defaultClassNames.root),
|
|
505
|
+
months: chunk4H5U5IHH_cjs.cn(
|
|
506
506
|
"flex gap-4 flex-col md:flex-row relative",
|
|
507
507
|
defaultClassNames.months
|
|
508
508
|
),
|
|
509
|
-
month:
|
|
510
|
-
nav:
|
|
509
|
+
month: chunk4H5U5IHH_cjs.cn("flex flex-col w-full gap-4", defaultClassNames.month),
|
|
510
|
+
nav: chunk4H5U5IHH_cjs.cn(
|
|
511
511
|
"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",
|
|
512
512
|
defaultClassNames.nav
|
|
513
513
|
),
|
|
514
|
-
button_previous:
|
|
514
|
+
button_previous: chunk4H5U5IHH_cjs.cn(
|
|
515
515
|
buttonVariants({ variant: buttonVariant }),
|
|
516
516
|
"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
|
|
517
517
|
defaultClassNames.button_previous
|
|
518
518
|
),
|
|
519
|
-
button_next:
|
|
519
|
+
button_next: chunk4H5U5IHH_cjs.cn(
|
|
520
520
|
buttonVariants({ variant: buttonVariant }),
|
|
521
521
|
"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",
|
|
522
522
|
defaultClassNames.button_next
|
|
523
523
|
),
|
|
524
|
-
month_caption:
|
|
524
|
+
month_caption: chunk4H5U5IHH_cjs.cn(
|
|
525
525
|
"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",
|
|
526
526
|
defaultClassNames.month_caption
|
|
527
527
|
),
|
|
528
|
-
dropdowns:
|
|
528
|
+
dropdowns: chunk4H5U5IHH_cjs.cn(
|
|
529
529
|
"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",
|
|
530
530
|
defaultClassNames.dropdowns
|
|
531
531
|
),
|
|
532
|
-
dropdown_root:
|
|
532
|
+
dropdown_root: chunk4H5U5IHH_cjs.cn(
|
|
533
533
|
"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",
|
|
534
534
|
defaultClassNames.dropdown_root
|
|
535
535
|
),
|
|
536
|
-
dropdown:
|
|
536
|
+
dropdown: chunk4H5U5IHH_cjs.cn(
|
|
537
537
|
"absolute bg-popover inset-0 opacity-0",
|
|
538
538
|
defaultClassNames.dropdown
|
|
539
539
|
),
|
|
540
|
-
caption_label:
|
|
540
|
+
caption_label: chunk4H5U5IHH_cjs.cn(
|
|
541
541
|
"select-none font-medium",
|
|
542
542
|
captionLayout === "label" ? "text-sm" : "rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",
|
|
543
543
|
defaultClassNames.caption_label
|
|
544
544
|
),
|
|
545
545
|
table: "w-full border-collapse",
|
|
546
|
-
weekdays:
|
|
547
|
-
weekday:
|
|
546
|
+
weekdays: chunk4H5U5IHH_cjs.cn("flex", defaultClassNames.weekdays),
|
|
547
|
+
weekday: chunk4H5U5IHH_cjs.cn(
|
|
548
548
|
"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",
|
|
549
549
|
defaultClassNames.weekday
|
|
550
550
|
),
|
|
551
|
-
week:
|
|
552
|
-
week_number_header:
|
|
551
|
+
week: chunk4H5U5IHH_cjs.cn("flex w-full mt-2", defaultClassNames.week),
|
|
552
|
+
week_number_header: chunk4H5U5IHH_cjs.cn(
|
|
553
553
|
"select-none w-(--cell-size)",
|
|
554
554
|
defaultClassNames.week_number_header
|
|
555
555
|
),
|
|
556
|
-
week_number:
|
|
556
|
+
week_number: chunk4H5U5IHH_cjs.cn(
|
|
557
557
|
"text-[0.8rem] select-none text-muted-foreground",
|
|
558
558
|
defaultClassNames.week_number
|
|
559
559
|
),
|
|
560
|
-
day:
|
|
560
|
+
day: chunk4H5U5IHH_cjs.cn(
|
|
561
561
|
"relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",
|
|
562
562
|
defaultClassNames.day
|
|
563
563
|
),
|
|
564
|
-
range_start:
|
|
564
|
+
range_start: chunk4H5U5IHH_cjs.cn(
|
|
565
565
|
"rounded-l-md bg-accent",
|
|
566
566
|
defaultClassNames.range_start
|
|
567
567
|
),
|
|
568
|
-
range_middle:
|
|
569
|
-
range_end:
|
|
570
|
-
today:
|
|
568
|
+
range_middle: chunk4H5U5IHH_cjs.cn("rounded-none", defaultClassNames.range_middle),
|
|
569
|
+
range_end: chunk4H5U5IHH_cjs.cn("rounded-r-md bg-accent", defaultClassNames.range_end),
|
|
570
|
+
today: chunk4H5U5IHH_cjs.cn(
|
|
571
571
|
"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
|
|
572
572
|
defaultClassNames.today
|
|
573
573
|
),
|
|
574
|
-
outside:
|
|
574
|
+
outside: chunk4H5U5IHH_cjs.cn(
|
|
575
575
|
"text-muted-foreground aria-selected:text-muted-foreground",
|
|
576
576
|
defaultClassNames.outside
|
|
577
577
|
),
|
|
578
|
-
disabled:
|
|
578
|
+
disabled: chunk4H5U5IHH_cjs.cn(
|
|
579
579
|
"text-muted-foreground opacity-50",
|
|
580
580
|
defaultClassNames.disabled
|
|
581
581
|
),
|
|
582
|
-
hidden:
|
|
582
|
+
hidden: chunk4H5U5IHH_cjs.cn("invisible", defaultClassNames.hidden),
|
|
583
583
|
...classNames
|
|
584
584
|
},
|
|
585
585
|
components: {
|
|
@@ -589,25 +589,25 @@ function Calendar({
|
|
|
589
589
|
{
|
|
590
590
|
"data-slot": "calendar",
|
|
591
591
|
ref: rootRef,
|
|
592
|
-
className:
|
|
592
|
+
className: chunk4H5U5IHH_cjs.cn(className2),
|
|
593
593
|
...props2
|
|
594
594
|
}
|
|
595
595
|
);
|
|
596
596
|
},
|
|
597
597
|
Chevron: ({ className: className2, orientation, ...props2 }) => {
|
|
598
598
|
if (orientation === "left") {
|
|
599
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className:
|
|
599
|
+
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: chunk4H5U5IHH_cjs.cn("size-4", className2), ...props2 });
|
|
600
600
|
}
|
|
601
601
|
if (orientation === "right") {
|
|
602
602
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
603
603
|
lucideReact.ChevronRightIcon,
|
|
604
604
|
{
|
|
605
|
-
className:
|
|
605
|
+
className: chunk4H5U5IHH_cjs.cn("size-4", className2),
|
|
606
606
|
...props2
|
|
607
607
|
}
|
|
608
608
|
);
|
|
609
609
|
}
|
|
610
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className:
|
|
610
|
+
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: chunk4H5U5IHH_cjs.cn("size-4", className2), ...props2 });
|
|
611
611
|
},
|
|
612
612
|
DayButton: CalendarDayButton,
|
|
613
613
|
WeekNumber: ({ children, ...props2 }) => {
|
|
@@ -641,7 +641,7 @@ function CalendarDayButton({
|
|
|
641
641
|
"data-range-start": modifiers.range_start,
|
|
642
642
|
"data-range-end": modifiers.range_end,
|
|
643
643
|
"data-range-middle": modifiers.range_middle,
|
|
644
|
-
className:
|
|
644
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
645
645
|
"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",
|
|
646
646
|
defaultClassNames.day,
|
|
647
647
|
className
|
|
@@ -672,7 +672,7 @@ function PopoverContent({
|
|
|
672
672
|
"data-slot": "popover-content",
|
|
673
673
|
align,
|
|
674
674
|
sideOffset,
|
|
675
|
-
className:
|
|
675
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
676
676
|
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
|
|
677
677
|
className
|
|
678
678
|
),
|
|
@@ -696,8 +696,8 @@ var SmartDatePicker = ({
|
|
|
696
696
|
info,
|
|
697
697
|
subLabel
|
|
698
698
|
}) => {
|
|
699
|
-
const { value, error, onChange, fieldRef, registerValidation } =
|
|
700
|
-
const fieldDetection =
|
|
699
|
+
const { value, error, onChange, fieldRef, registerValidation } = chunk4H5U5IHH_cjs.useFormField(field);
|
|
700
|
+
const fieldDetection = chunk4H5U5IHH_cjs.useFieldDetection();
|
|
701
701
|
const hasRegistered = React4.useRef(false);
|
|
702
702
|
const hasSetDefault = React4.useRef(false);
|
|
703
703
|
const parsedValue = React4.useMemo(() => {
|
|
@@ -755,17 +755,17 @@ var SmartDatePicker = ({
|
|
|
755
755
|
if (!parsedValue) return placeholder || `Select ${label || field}`;
|
|
756
756
|
return dateFns.format(parsedValue, "dd/MM/yyyy");
|
|
757
757
|
}, [parsedValue, placeholder, label, field]);
|
|
758
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
758
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk4H5U5IHH_cjs.cn("flex-1 min-w-0", className), children: [
|
|
759
759
|
label && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2", children: [
|
|
760
760
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
761
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
761
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Label, { className: "text-sm font-medium text-foreground", children: [
|
|
762
762
|
label,
|
|
763
763
|
" ",
|
|
764
764
|
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-destructive", children: "*" })
|
|
765
765
|
] }),
|
|
766
|
-
info && /* @__PURE__ */ jsxRuntime.jsx(
|
|
767
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
768
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
766
|
+
info && /* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Tooltip, { children: [
|
|
767
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.InfoIcon, { className: "h-4 w-4 text-muted-foreground cursor-pointer mr-2" }) }),
|
|
768
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "max-w-xs", children: info }) })
|
|
769
769
|
] }) })
|
|
770
770
|
] }),
|
|
771
771
|
subLabel && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: subLabel })
|
|
@@ -776,7 +776,7 @@ var SmartDatePicker = ({
|
|
|
776
776
|
{
|
|
777
777
|
ref: fieldRef,
|
|
778
778
|
variant: "outline",
|
|
779
|
-
className:
|
|
779
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
780
780
|
"w-full justify-start text-left font-normal",
|
|
781
781
|
!parsedValue && "text-muted-foreground",
|
|
782
782
|
error && "border-destructive"
|
|
@@ -820,8 +820,8 @@ var SmartTags = ({
|
|
|
820
820
|
info,
|
|
821
821
|
subLabel
|
|
822
822
|
}) => {
|
|
823
|
-
const { value, error, onChange, fieldRef, registerValidation } =
|
|
824
|
-
const fieldDetection =
|
|
823
|
+
const { value, error, onChange, fieldRef, registerValidation } = chunk4H5U5IHH_cjs.useFormField(field);
|
|
824
|
+
const fieldDetection = chunk4H5U5IHH_cjs.useFieldDetection();
|
|
825
825
|
const hasRegistered = React4.useRef(false);
|
|
826
826
|
const hasSetDefault = React4.useRef(false);
|
|
827
827
|
const [tags, setTags] = React4.useState([]);
|
|
@@ -890,7 +890,7 @@ var SmartTags = ({
|
|
|
890
890
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex-1 min-w-0 ${className}`, children: [
|
|
891
891
|
label && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2", children: [
|
|
892
892
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
893
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
893
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Label, { className: "text-sm font-medium text-foreground", children: [
|
|
894
894
|
label,
|
|
895
895
|
" ",
|
|
896
896
|
required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-destructive", children: "*" }),
|
|
@@ -902,9 +902,9 @@ var SmartTags = ({
|
|
|
902
902
|
")"
|
|
903
903
|
] })
|
|
904
904
|
] }),
|
|
905
|
-
info && /* @__PURE__ */ jsxRuntime.jsx(
|
|
906
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
907
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
905
|
+
info && /* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunk4H5U5IHH_cjs.Tooltip, { children: [
|
|
906
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.InfoIcon, { className: "h-4 w-4 text-muted-foreground cursor-pointer mr-2" }) }),
|
|
907
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk4H5U5IHH_cjs.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "max-w-xs", children: info }) })
|
|
908
908
|
] }) })
|
|
909
909
|
] }),
|
|
910
910
|
subLabel && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: subLabel })
|
|
@@ -913,7 +913,7 @@ var SmartTags = ({
|
|
|
913
913
|
"div",
|
|
914
914
|
{
|
|
915
915
|
ref: fieldRef,
|
|
916
|
-
className:
|
|
916
|
+
className: chunk4H5U5IHH_cjs.cn(
|
|
917
917
|
"min-h-[40px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background",
|
|
918
918
|
"focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2",
|
|
919
919
|
"flex flex-wrap items-center gap-2 cursor-text",
|
|
@@ -949,7 +949,7 @@ var SmartTags = ({
|
|
|
949
949
|
`${tagText}-${index}`
|
|
950
950
|
)),
|
|
951
951
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
952
|
-
|
|
952
|
+
chunk4H5U5IHH_cjs.Input,
|
|
953
953
|
{
|
|
954
954
|
ref: inputRef,
|
|
955
955
|
type: "text",
|
|
@@ -978,5 +978,5 @@ exports.SmartDatePicker = SmartDatePicker;
|
|
|
978
978
|
exports.SmartRadioGroup = SmartRadioGroup;
|
|
979
979
|
exports.SmartSelect = SmartSelect;
|
|
980
980
|
exports.SmartTags = SmartTags;
|
|
981
|
-
//# sourceMappingURL=chunk-
|
|
982
|
-
//# sourceMappingURL=chunk-
|
|
981
|
+
//# sourceMappingURL=chunk-CJ55WKPC.cjs.map
|
|
982
|
+
//# sourceMappingURL=chunk-CJ55WKPC.cjs.map
|