asterui 0.12.16 → 0.12.18

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.
Files changed (144) hide show
  1. package/dist/components/Card.d.ts +14 -2
  2. package/dist/components/Checkbox.d.ts +3 -1
  3. package/dist/components/Form.d.ts +7 -1
  4. package/dist/components/Input.d.ts +10 -2
  5. package/dist/components/Select.d.ts +8 -0
  6. package/dist/index.d.ts +0 -2
  7. package/dist/index.js +134 -136
  8. package/dist/index.js.map +1 -1
  9. package/dist/index10.js +70 -65
  10. package/dist/index10.js.map +1 -1
  11. package/dist/index100.js +43 -11
  12. package/dist/index100.js.map +1 -1
  13. package/dist/index101.js +11 -44
  14. package/dist/index101.js.map +1 -1
  15. package/dist/index102.js +12 -10
  16. package/dist/index102.js.map +1 -1
  17. package/dist/index103.js +7 -14
  18. package/dist/index103.js.map +1 -1
  19. package/dist/index104.js +12 -7
  20. package/dist/index104.js.map +1 -1
  21. package/dist/index105.js +29 -11
  22. package/dist/index105.js.map +1 -1
  23. package/dist/index106.js +16 -29
  24. package/dist/index106.js.map +1 -1
  25. package/dist/index13.js +86 -68
  26. package/dist/index13.js.map +1 -1
  27. package/dist/index34.js +198 -158
  28. package/dist/index34.js.map +1 -1
  29. package/dist/index42.js +185 -148
  30. package/dist/index42.js.map +1 -1
  31. package/dist/index43.js +19 -19
  32. package/dist/index43.js.map +1 -1
  33. package/dist/index46.js +134 -18
  34. package/dist/index46.js.map +1 -1
  35. package/dist/index47.js +10 -134
  36. package/dist/index47.js.map +1 -1
  37. package/dist/index48.js +35 -13
  38. package/dist/index48.js.map +1 -1
  39. package/dist/index49.js +34 -35
  40. package/dist/index49.js.map +1 -1
  41. package/dist/index50.js +81 -34
  42. package/dist/index50.js.map +1 -1
  43. package/dist/index51.js +166 -71
  44. package/dist/index51.js.map +1 -1
  45. package/dist/index52.js +144 -167
  46. package/dist/index52.js.map +1 -1
  47. package/dist/index53.js +11 -152
  48. package/dist/index53.js.map +1 -1
  49. package/dist/index54.js +20 -10
  50. package/dist/index54.js.map +1 -1
  51. package/dist/index55.js +14 -22
  52. package/dist/index55.js.map +1 -1
  53. package/dist/index56.js +7 -14
  54. package/dist/index56.js.map +1 -1
  55. package/dist/index57.js +333 -6
  56. package/dist/index57.js.map +1 -1
  57. package/dist/index58.js +47 -334
  58. package/dist/index58.js.map +1 -1
  59. package/dist/index59.js +122 -47
  60. package/dist/index59.js.map +1 -1
  61. package/dist/index60.js +108 -120
  62. package/dist/index60.js.map +1 -1
  63. package/dist/index61.js +167 -107
  64. package/dist/index61.js.map +1 -1
  65. package/dist/index62.js +29 -167
  66. package/dist/index62.js.map +1 -1
  67. package/dist/index63.js +120 -30
  68. package/dist/index63.js.map +1 -1
  69. package/dist/index64.js +80 -116
  70. package/dist/index64.js.map +1 -1
  71. package/dist/index65.js +19 -85
  72. package/dist/index65.js.map +1 -1
  73. package/dist/index66.js +73 -19
  74. package/dist/index66.js.map +1 -1
  75. package/dist/index67.js +54 -71
  76. package/dist/index67.js.map +1 -1
  77. package/dist/index68.js +44 -56
  78. package/dist/index68.js.map +1 -1
  79. package/dist/index69.js +49 -42
  80. package/dist/index69.js.map +1 -1
  81. package/dist/index70.js +121 -50
  82. package/dist/index70.js.map +1 -1
  83. package/dist/index71.js +102 -118
  84. package/dist/index71.js.map +1 -1
  85. package/dist/index72.js +72 -105
  86. package/dist/index72.js.map +1 -1
  87. package/dist/index73.js +68 -41
  88. package/dist/index73.js.map +1 -1
  89. package/dist/index74.js +19 -66
  90. package/dist/index74.js.map +1 -1
  91. package/dist/index75.js +55 -18
  92. package/dist/index75.js.map +1 -1
  93. package/dist/index76.js +251 -55
  94. package/dist/index76.js.map +1 -1
  95. package/dist/index77.js +22 -254
  96. package/dist/index77.js.map +1 -1
  97. package/dist/index78.js +31 -22
  98. package/dist/index78.js.map +1 -1
  99. package/dist/index79.js +93 -30
  100. package/dist/index79.js.map +1 -1
  101. package/dist/index80.js +324 -89
  102. package/dist/index80.js.map +1 -1
  103. package/dist/index81.js +73 -322
  104. package/dist/index81.js.map +1 -1
  105. package/dist/index82.js +39 -79
  106. package/dist/index82.js.map +1 -1
  107. package/dist/index83.js +23 -40
  108. package/dist/index83.js.map +1 -1
  109. package/dist/index84.js +93 -21
  110. package/dist/index84.js.map +1 -1
  111. package/dist/index85.js +148 -87
  112. package/dist/index85.js.map +1 -1
  113. package/dist/index86.js +152 -147
  114. package/dist/index86.js.map +1 -1
  115. package/dist/index87.js +63 -159
  116. package/dist/index87.js.map +1 -1
  117. package/dist/index88.js +35 -65
  118. package/dist/index88.js.map +1 -1
  119. package/dist/index89.js +234 -35
  120. package/dist/index89.js.map +1 -1
  121. package/dist/index90.js +31 -231
  122. package/dist/index90.js.map +1 -1
  123. package/dist/index91.js +210 -34
  124. package/dist/index91.js.map +1 -1
  125. package/dist/index92.js +198 -195
  126. package/dist/index92.js.map +1 -1
  127. package/dist/index93.js +241 -159
  128. package/dist/index93.js.map +1 -1
  129. package/dist/index94.js +166 -283
  130. package/dist/index94.js.map +1 -1
  131. package/dist/index95.js +253 -173
  132. package/dist/index95.js.map +1 -1
  133. package/dist/index96.js +14 -258
  134. package/dist/index96.js.map +1 -1
  135. package/dist/index97.js +31 -12
  136. package/dist/index97.js.map +1 -1
  137. package/dist/index98.js +5 -32
  138. package/dist/index98.js.map +1 -1
  139. package/dist/index99.js +13 -5
  140. package/dist/index99.js.map +1 -1
  141. package/package.json +1 -1
  142. package/dist/components/Label.d.ts +0 -15
  143. package/dist/index107.js +0 -21
  144. package/dist/index107.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index34.js","sources":["../src/components/Form.tsx"],"sourcesContent":["import React, { createContext, useContext, cloneElement, isValidElement, useId, useEffect, useRef } from 'react'\nimport { useForm, UseFormReturn, FieldValues, SubmitHandler, UseFormProps, Controller, useFieldArray, FieldArrayPath, FieldArray, useWatch } from 'react-hook-form'\n\ninterface FormContextValue {\n form: UseFormReturn<any>\n layout?: 'vertical' | 'horizontal' | 'inline'\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n labelWidth?: number\n listName?: string\n disabled?: boolean\n}\n\nconst FormContext = createContext<FormContextValue | undefined>(undefined)\n\n// Built-in type validators\nconst TYPE_VALIDATORS = {\n email: {\n value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i,\n message: 'Please enter a valid email address',\n },\n url: {\n value: /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$/,\n message: 'Please enter a valid URL',\n },\n number: {\n value: /^-?\\d+(\\.\\d+)?$/,\n message: 'Please enter a valid number',\n },\n}\n\nexport interface FormProps<TFieldValues extends FieldValues = FieldValues>\n extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit'> {\n form?: UseFormReturn<TFieldValues>\n onFinish?: SubmitHandler<TFieldValues>\n /** Called when form validation fails */\n onFinishFailed?: (errorInfo: { values: TFieldValues; errorFields: Array<{ name: string; errors: string[] }> }) => void\n initialValues?: UseFormProps<TFieldValues>['defaultValues']\n layout?: 'vertical' | 'horizontal' | 'inline'\n /** Label width in pixels for horizontal layout (default: 80) */\n labelWidth?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Disable all form fields */\n disabled?: boolean\n children: React.ReactNode\n}\n\nexport interface FormRule {\n required?: boolean | string\n type?: 'email' | 'url' | 'number'\n min?: number | { value: number; message: string }\n max?: number | { value: number; message: string }\n pattern?: RegExp | { value: RegExp; message: string }\n message?: string\n validate?: (value: any) => boolean | string | Promise<boolean | string>\n}\n\nexport type ValidateTrigger = 'onChange' | 'onBlur' | 'onSubmit' | ('onChange' | 'onBlur' | 'onSubmit')[]\n\nexport interface FormItemProps {\n name?: string | string[]\n label?: string\n help?: string\n required?: boolean\n rules?: FormRule | FormRule[]\n valuePropName?: string\n inline?: boolean\n className?: string\n children: React.ReactElement\n /** Tooltip text to show next to label */\n tooltip?: string\n /** Additional content below the form control */\n extra?: React.ReactNode\n /** Show validation feedback icon */\n hasFeedback?: boolean\n /** Field names that this field depends on for validation */\n dependencies?: string[]\n /** When to trigger validation */\n validateTrigger?: ValidateTrigger\n /** Initial value for this field (overrides Form's initialValues) */\n initialValue?: any\n /** Hide this field (still validates and submits) */\n hidden?: boolean\n}\n\nexport interface FormListProps<TFieldValues extends FieldValues = FieldValues> {\n name: FieldArrayPath<TFieldValues>\n children: (\n fields: FieldArray<TFieldValues>[],\n operations: {\n add: (value?: any) => void\n remove: (index: number) => void\n move: (from: number, to: number) => void\n }\n ) => React.ReactNode\n}\n\nfunction useFormContext() {\n const context = useContext(FormContext)\n if (!context) {\n throw new Error('Form compound components must be used within Form')\n }\n return context\n}\n\nfunction FormRoot<TFieldValues extends FieldValues = FieldValues>({\n form: externalForm,\n onFinish,\n onFinishFailed,\n initialValues,\n layout = 'vertical',\n labelWidth = 60,\n size,\n disabled = false,\n children,\n className = '',\n noValidate = true,\n ...props\n}: FormProps<TFieldValues>) {\n const internalForm = useForm<TFieldValues>({\n defaultValues: initialValues,\n })\n\n const form = externalForm || internalForm\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n\n // Trigger validation\n const isValid = await form.trigger()\n\n if (isValid) {\n if (onFinish) {\n onFinish(form.getValues())\n }\n } else {\n if (onFinishFailed) {\n const errors = form.formState.errors\n const errorFields: Array<{ name: string; errors: string[] }> = []\n\n // Flatten errors into errorFields array\n const flattenErrors = (obj: any, prefix = '') => {\n for (const key in obj) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n if (value?.message) {\n errorFields.push({ name: fullKey, errors: [value.message as string] })\n } else if (typeof value === 'object' && value !== null) {\n flattenErrors(value, fullKey)\n }\n }\n }\n flattenErrors(errors)\n\n onFinishFailed({ values: form.getValues(), errorFields })\n }\n }\n }\n\n const handleReset = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n form.reset(initialValues as any)\n }\n\n return (\n <FormContext.Provider value={{ form, layout, labelWidth, size, disabled }}>\n <form onSubmit={handleSubmit} onReset={handleReset} className={className} noValidate={noValidate} {...props}>\n {children}\n </form>\n </FormContext.Provider>\n )\n}\n\nfunction FormItem({\n name,\n label,\n help,\n required = false,\n rules,\n valuePropName = 'value',\n inline = false,\n className = '',\n children,\n tooltip,\n extra,\n hasFeedback = false,\n dependencies,\n validateTrigger = 'onChange',\n initialValue,\n hidden = false,\n}: FormItemProps) {\n const { form, size, listName, layout, labelWidth, disabled: formDisabled } = useFormContext()\n const inputId = useId()\n const errorId = useId()\n\n if (!name) {\n // Render without form control if no name provided\n return <div className={`form-control ${inline ? 'w-auto' : 'w-full'} ${className}`} style={hidden ? { display: 'none' } : undefined}>{children}</div>\n }\n\n // Handle nested field names (for Form.List)\n let fieldName: string\n if (Array.isArray(name)) {\n // If we're inside a Form.List, prepend the list name\n const fullPath = listName ? [listName, ...name] : name\n fieldName = fullPath.join('.')\n } else {\n fieldName = name\n }\n\n // Set initial value if provided\n useEffect(() => {\n if (initialValue !== undefined) {\n const currentValue = form.getValues(fieldName as any)\n if (currentValue === undefined) {\n form.setValue(fieldName as any, initialValue)\n }\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Watch dependencies and re-validate when they change\n const watchedDeps = useWatch({\n control: form.control,\n name: dependencies as any,\n disabled: !dependencies || dependencies.length === 0,\n })\n\n // Use refs to avoid infinite loops\n const formRef = useRef(form)\n formRef.current = form\n const prevDepsRef = useRef<string | undefined>(undefined)\n\n useEffect(() => {\n // Skip if no dependencies\n if (!dependencies || dependencies.length === 0) return\n\n // Skip initial render\n if (prevDepsRef.current === undefined) {\n prevDepsRef.current = JSON.stringify(watchedDeps)\n return\n }\n\n // Only trigger if dependency values actually changed\n const currentDeps = JSON.stringify(watchedDeps)\n if (prevDepsRef.current !== currentDeps) {\n prevDepsRef.current = currentDeps\n formRef.current.trigger(fieldName as any)\n }\n }, [watchedDeps, dependencies, fieldName])\n\n // Get error by traversing the error object path\n const getErrorByPath = (path: string) => {\n const keys = path.split('.')\n let error: any = form.formState.errors\n for (const key of keys) {\n if (!error) break\n error = error[key]\n }\n return error\n }\n\n const error = getErrorByPath(fieldName)\n const errorMessage = error?.message as string | undefined\n\n // Normalize rules to array\n const rulesArray: FormRule[] = rules\n ? Array.isArray(rules) ? rules : [rules]\n : []\n\n // Build validation rules\n const validationRules: any = {}\n const patternValidators: Array<{ pattern: RegExp; message: string }> = []\n const customValidators: Array<(value: any) => boolean | string | Promise<boolean | string>> = []\n\n // Handle top-level required prop\n if (required) {\n validationRules.required = 'This field is required'\n }\n\n // Process each rule\n for (const rule of rulesArray) {\n // Required\n if (rule.required) {\n validationRules.required = typeof rule.required === 'string'\n ? rule.required\n : rule.message || 'This field is required'\n }\n\n // Type validator\n if (rule.type && TYPE_VALIDATORS[rule.type]) {\n patternValidators.push({\n pattern: TYPE_VALIDATORS[rule.type].value,\n message: rule.message || TYPE_VALIDATORS[rule.type].message,\n })\n }\n\n // Min length\n if (rule.min !== undefined) {\n const minValue = typeof rule.min === 'object' ? rule.min.value : rule.min\n const minMessage = typeof rule.min === 'object'\n ? rule.min.message\n : rule.message || `Minimum length is ${minValue} characters`\n validationRules.minLength = { value: minValue, message: minMessage }\n }\n\n // Max length\n if (rule.max !== undefined) {\n const maxValue = typeof rule.max === 'object' ? rule.max.value : rule.max\n const maxMessage = typeof rule.max === 'object'\n ? rule.max.message\n : rule.message || `Maximum length is ${maxValue} characters`\n validationRules.maxLength = { value: maxValue, message: maxMessage }\n }\n\n // Pattern - collect all patterns\n if (rule.pattern) {\n const patternValue = rule.pattern instanceof RegExp ? rule.pattern : rule.pattern.value\n const patternMessage = rule.pattern instanceof RegExp\n ? rule.message || 'Invalid format'\n : rule.pattern.message\n patternValidators.push({ pattern: patternValue, message: patternMessage })\n }\n\n // Custom validator\n if (rule.validate) {\n customValidators.push(rule.validate)\n }\n }\n\n // Combine all pattern and custom validators into a single validate function\n if (patternValidators.length > 0 || customValidators.length > 0) {\n validationRules.validate = async (value: any) => {\n // Skip validation if empty (required rule handles that)\n if (!value && !validationRules.required) return true\n\n // Check all patterns\n for (const { pattern, message } of patternValidators) {\n if (value && !pattern.test(value)) {\n return message\n }\n }\n\n // Run all custom validators\n for (const validator of customValidators) {\n const result = await validator(value)\n if (result !== true) {\n return result\n }\n }\n\n return true\n }\n }\n\n // Normalize validateTrigger to array\n const triggers = Array.isArray(validateTrigger) ? validateTrigger : [validateTrigger]\n const shouldValidateOnChange = triggers.includes('onChange')\n const shouldValidateOnBlur = triggers.includes('onBlur')\n\n // Feedback icons\n const FeedbackIcon = ({ hasError, isValidating }: { hasError: boolean; isValidating: boolean }) => {\n if (isValidating) {\n return (\n <span className=\"loading loading-spinner loading-xs text-base-content/50\" />\n )\n }\n if (hasError) {\n return (\n <svg className=\"w-4 h-4 text-error\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n )\n }\n return (\n <svg className=\"w-4 h-4 text-success\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n }\n\n // Tooltip icon\n const TooltipIcon = () => (\n <div className=\"tooltip tooltip-top ml-1\" data-tip={tooltip}>\n <svg className=\"w-4 h-4 text-base-content/50 cursor-help\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n </div>\n )\n\n return (\n <Controller\n name={fieldName}\n control={form.control}\n rules={validationRules}\n render={({ field, fieldState }) => {\n const { value, onChange, onBlur, ref } = field\n const isValidating = fieldState.isTouched && form.formState.isValidating\n\n // Clone the child element and inject form control props\n const childProps: any = {\n id: inputId,\n ref,\n 'aria-invalid': error ? true : undefined,\n 'aria-describedby': error ? errorId : undefined,\n }\n\n // Handle onBlur based on validateTrigger\n childProps.onBlur = () => {\n onBlur()\n if (shouldValidateOnBlur) {\n form.trigger(fieldName as any)\n }\n }\n\n // Handle different value prop names (e.g., 'checked' for checkboxes)\n if (valuePropName === 'checked') {\n childProps.checked = value\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.checked)\n if (shouldValidateOnChange) {\n form.trigger(fieldName as any)\n }\n }\n } else {\n childProps.value = value || ''\n childProps.onChange = (eventOrValue: any) => {\n // Handle components that pass value directly (e.g., Range, Rating)\n // vs components that pass event object (e.g., Input, Select)\n if (eventOrValue && eventOrValue.target !== undefined) {\n onChange(eventOrValue.target.value)\n } else {\n onChange(eventOrValue)\n }\n if (shouldValidateOnChange) {\n form.trigger(fieldName as any)\n }\n }\n }\n\n // Apply size if specified at form level\n if (size && isValidElement(children)) {\n const existingProps = children.props as any\n if (!existingProps.size) {\n childProps.size = size\n }\n }\n\n // Apply error styling and accessibility\n if (error) {\n childProps.color = 'error'\n childProps['aria-invalid'] = true\n }\n\n // Apply form-level disabled state\n if (formDisabled) {\n childProps.disabled = true\n }\n\n const enhancedChild = isValidElement(children)\n ? cloneElement(children as React.ReactElement<any>, childProps)\n : children\n\n const isHorizontal = layout === 'horizontal'\n const isInline = layout === 'inline'\n\n return (\n <div className={`form-control ${inline ? 'w-auto' : 'w-full'} ${isHorizontal ? 'mb-4' : ''} ${isInline ? 'inline-flex mr-4' : ''} ${className}`} style={hidden ? { display: 'none' } : undefined}>\n <div className={isHorizontal ? 'flex items-center gap-4' : ''}>\n {label && (\n <label\n htmlFor={inputId}\n className={`label ${isHorizontal ? 'flex-shrink-0 justify-end py-0' : ''} ${!isHorizontal && !isInline ? 'pb-1' : ''}`}\n style={isHorizontal ? { width: labelWidth } : undefined}\n >\n <span className=\"label-text flex items-center\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n {tooltip && <TooltipIcon />}\n </span>\n </label>\n )}\n <div className={`${isHorizontal ? 'flex-1' : ''} ${hasFeedback ? 'relative' : ''}`}>\n {enhancedChild}\n {hasFeedback && fieldState.isTouched && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none\">\n <FeedbackIcon hasError={!!error} isValidating={isValidating} />\n </span>\n )}\n </div>\n </div>\n {!isHorizontal && !inline && (\n <p id={errorId} className={`validator-hint ${errorMessage ? '!visible text-error' : ''} min-h-[1.25rem]`} role={errorMessage ? 'alert' : undefined}>\n {errorMessage || (help && <span className=\"text-base-content/70\">{help}</span>) || '\\u00A0'}\n </p>\n )}\n {isHorizontal && (errorMessage || help) && (\n <p id={errorId} className={`validator-hint ${errorMessage ? '!visible text-error' : ''} min-h-[1.25rem]`} role={errorMessage ? 'alert' : undefined}>\n {errorMessage || (help && <span className=\"text-base-content/70\">{help}</span>)}\n </p>\n )}\n {extra && (\n <div className=\"text-sm text-base-content/60 mt-1\">{extra}</div>\n )}\n </div>\n )\n }}\n />\n )\n}\n\nfunction FormList<TFieldValues extends FieldValues = FieldValues>({\n name,\n children,\n}: FormListProps<TFieldValues>) {\n const { form, layout, size, disabled } = useFormContext()\n\n const { fields, append, remove, move } = useFieldArray({\n control: form.control,\n name,\n })\n\n // Add name (index) to each field for proper path construction\n const fieldsWithName = fields.map((field, index) => ({\n ...field,\n name: index,\n }))\n\n return (\n <FormContext.Provider value={{ form, layout, size, listName: name as string, disabled }}>\n {children(fieldsWithName as any, {\n add: append,\n remove,\n move,\n })}\n </FormContext.Provider>\n )\n}\n\n// Enhanced hook to expose full form API\nexport function useFormInstance<TFieldValues extends FieldValues = FieldValues>() {\n const formInstance = useForm<TFieldValues>()\n\n // Add convenience methods to the instance\n const enhancedInstance = formInstance as typeof formInstance & {\n setFieldValue: typeof formInstance.setValue\n getFieldValue: (name: any) => any\n getFieldsValue: typeof formInstance.getValues\n setFieldsValue: (values: any) => void\n validateFields: typeof formInstance.trigger\n resetFields: typeof formInstance.reset\n isFieldTouched: (name: string) => boolean\n getFieldError: (name: string) => string | undefined\n }\n\n // Add the alias methods\n enhancedInstance.setFieldValue = formInstance.setValue\n enhancedInstance.getFieldValue = (name: any) => formInstance.getValues(name)\n enhancedInstance.getFieldsValue = formInstance.getValues\n enhancedInstance.setFieldsValue = (values: any) => {\n Object.keys(values).forEach((key) => {\n formInstance.setValue(key as any, values[key])\n })\n }\n enhancedInstance.validateFields = formInstance.trigger\n enhancedInstance.resetFields = formInstance.reset\n enhancedInstance.isFieldTouched = (name: string) => {\n const touched = formInstance.formState.touchedFields as any\n return !!touched[name]\n }\n enhancedInstance.getFieldError = (name: string) => {\n const errors = formInstance.formState.errors as any\n return errors[name]?.message as string | undefined\n }\n\n return enhancedInstance\n}\n\nexport interface FormErrorListProps {\n /** Specific field names to show errors for (shows all errors if not specified) */\n fields?: string[]\n /** Custom className */\n className?: string\n}\n\nfunction FormErrorList({ fields, className = '' }: FormErrorListProps) {\n const { form } = useFormContext()\n const { errors } = form.formState\n\n // Flatten nested errors into a list\n const flattenErrors = (obj: any, prefix = ''): Array<{ field: string; message: string }> => {\n const result: Array<{ field: string; message: string }> = []\n\n for (const key in obj) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value?.message) {\n result.push({ field: fullKey, message: value.message as string })\n } else if (typeof value === 'object' && value !== null) {\n result.push(...flattenErrors(value, fullKey))\n }\n }\n\n return result\n }\n\n const allErrors = flattenErrors(errors)\n const filteredErrors = fields\n ? allErrors.filter(e => fields.includes(e.field))\n : allErrors\n\n if (filteredErrors.length === 0) {\n return null\n }\n\n return (\n <ul className={`text-error text-sm space-y-1 ${className}`} role=\"alert\">\n {filteredErrors.map((error, index) => (\n <li key={`${error.field}-${index}`} className=\"flex items-start gap-2\">\n <svg className=\"w-4 h-4 mt-0.5 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <span>{error.message}</span>\n </li>\n ))}\n </ul>\n )\n}\n\nexport const Form = Object.assign(FormRoot, {\n Item: FormItem,\n List: FormList,\n ErrorList: FormErrorList,\n useForm: useFormInstance,\n})\n\nexport type { UseFormReturn as FormInstance }\n"],"names":["FormContext","createContext","TYPE_VALIDATORS","useFormContext","context","useContext","FormRoot","externalForm","onFinish","onFinishFailed","initialValues","layout","labelWidth","size","disabled","children","className","noValidate","props","internalForm","useForm","form","handleSubmit","e","errors","errorFields","flattenErrors","obj","prefix","key","fullKey","value","handleReset","jsx","FormItem","name","label","help","required","rules","valuePropName","inline","tooltip","extra","hasFeedback","dependencies","validateTrigger","initialValue","hidden","listName","formDisabled","inputId","useId","errorId","fieldName","useEffect","watchedDeps","useWatch","formRef","useRef","prevDepsRef","currentDeps","error","path","keys","errorMessage","rulesArray","validationRules","patternValidators","customValidators","rule","minValue","minMessage","maxValue","maxMessage","patternValue","patternMessage","pattern","message","validator","result","triggers","shouldValidateOnChange","shouldValidateOnBlur","FeedbackIcon","hasError","isValidating","TooltipIcon","Controller","field","fieldState","onChange","onBlur","ref","childProps","eventOrValue","isValidElement","enhancedChild","cloneElement","isHorizontal","isInline","jsxs","FormList","fields","append","remove","move","useFieldArray","fieldsWithName","index","useFormInstance","formInstance","enhancedInstance","values","FormErrorList","allErrors","filteredErrors","Form"],"mappings":"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"}
1
+ {"version":3,"file":"index34.js","sources":["../src/components/Form.tsx"],"sourcesContent":["import React, { createContext, useContext, cloneElement, isValidElement, useId, useEffect, useRef } from 'react'\nimport { useForm, UseFormReturn, FieldValues, SubmitHandler, UseFormProps, Controller, useFieldArray, FieldArrayPath, FieldArray, useWatch } from 'react-hook-form'\n\ninterface FormContextValue {\n form: UseFormReturn<any>\n layout?: 'vertical' | 'horizontal' | 'inline'\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n labelWidth?: number\n listName?: string\n disabled?: boolean\n}\n\nconst FormContext = createContext<FormContextValue | undefined>(undefined)\n\n// Built-in type validators\nconst TYPE_VALIDATORS = {\n email: {\n value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i,\n message: 'Please enter a valid email address',\n },\n url: {\n value: /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$/,\n message: 'Please enter a valid URL',\n },\n number: {\n value: /^-?\\d+(\\.\\d+)?$/,\n message: 'Please enter a valid number',\n },\n}\n\nexport interface FormProps<TFieldValues extends FieldValues = FieldValues>\n extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit'> {\n form?: UseFormReturn<TFieldValues>\n onFinish?: SubmitHandler<TFieldValues>\n /** Called when form validation fails */\n onFinishFailed?: (errorInfo: { values: TFieldValues; errorFields: Array<{ name: string; errors: string[] }> }) => void\n initialValues?: UseFormProps<TFieldValues>['defaultValues']\n layout?: 'vertical' | 'horizontal' | 'inline'\n /** Label width in pixels for horizontal layout (default: 80) */\n labelWidth?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Disable all form fields */\n disabled?: boolean\n children: React.ReactNode\n}\n\nexport interface FormRule {\n required?: boolean | string\n type?: 'email' | 'url' | 'number'\n min?: number | { value: number; message: string }\n max?: number | { value: number; message: string }\n pattern?: RegExp | { value: RegExp; message: string }\n message?: string\n validate?: (value: any) => boolean | string | Promise<boolean | string>\n}\n\nexport type ValidateTrigger = 'onChange' | 'onBlur' | 'onSubmit' | ('onChange' | 'onBlur' | 'onSubmit')[]\n\nexport interface FormItemProps {\n name?: string | string[]\n label?: string\n /** Floating label text (alternative to label, uses DaisyUI floating-label) */\n floatingLabel?: string\n help?: string\n required?: boolean\n rules?: FormRule | FormRule[]\n valuePropName?: string\n inline?: boolean\n className?: string\n children: React.ReactElement\n /** Tooltip text to show next to label */\n tooltip?: string\n /** Additional content below the form control */\n extra?: React.ReactNode\n /** Show validation feedback icon */\n hasFeedback?: boolean\n /** Field names that this field depends on for validation */\n dependencies?: string[]\n /** When to trigger validation */\n validateTrigger?: ValidateTrigger\n /** Initial value for this field (overrides Form's initialValues) */\n initialValue?: any\n /** Hide this field (still validates and submits) */\n hidden?: boolean\n /** Text/element before input (outside, using DaisyUI label) */\n addonBefore?: React.ReactNode\n /** Text/element after input (outside, using DaisyUI label) */\n addonAfter?: React.ReactNode\n}\n\nexport interface FormListProps<TFieldValues extends FieldValues = FieldValues> {\n name: FieldArrayPath<TFieldValues>\n children: (\n fields: FieldArray<TFieldValues>[],\n operations: {\n add: (value?: any) => void\n remove: (index: number) => void\n move: (from: number, to: number) => void\n }\n ) => React.ReactNode\n}\n\nfunction useFormContext() {\n const context = useContext(FormContext)\n if (!context) {\n throw new Error('Form compound components must be used within Form')\n }\n return context\n}\n\nfunction FormRoot<TFieldValues extends FieldValues = FieldValues>({\n form: externalForm,\n onFinish,\n onFinishFailed,\n initialValues,\n layout = 'vertical',\n labelWidth = 60,\n size,\n disabled = false,\n children,\n className = '',\n noValidate = true,\n ...props\n}: FormProps<TFieldValues>) {\n const internalForm = useForm<TFieldValues>({\n defaultValues: initialValues,\n })\n\n const form = externalForm || internalForm\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n\n // Trigger validation\n const isValid = await form.trigger()\n\n if (isValid) {\n if (onFinish) {\n onFinish(form.getValues())\n }\n } else {\n if (onFinishFailed) {\n const errors = form.formState.errors\n const errorFields: Array<{ name: string; errors: string[] }> = []\n\n // Flatten errors into errorFields array\n const flattenErrors = (obj: any, prefix = '') => {\n for (const key in obj) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n if (value?.message) {\n errorFields.push({ name: fullKey, errors: [value.message as string] })\n } else if (typeof value === 'object' && value !== null) {\n flattenErrors(value, fullKey)\n }\n }\n }\n flattenErrors(errors)\n\n onFinishFailed({ values: form.getValues(), errorFields })\n }\n }\n }\n\n const handleReset = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n form.reset(initialValues as any)\n }\n\n return (\n <FormContext.Provider value={{ form, layout, labelWidth, size, disabled }}>\n <form onSubmit={handleSubmit} onReset={handleReset} className={className} noValidate={noValidate} {...props}>\n {children}\n </form>\n </FormContext.Provider>\n )\n}\n\nfunction FormItem({\n name,\n label,\n floatingLabel,\n help,\n required = false,\n rules,\n valuePropName = 'value',\n inline = false,\n className = '',\n children,\n tooltip,\n extra,\n hasFeedback = false,\n dependencies,\n validateTrigger = 'onChange',\n initialValue,\n hidden = false,\n addonBefore,\n addonAfter,\n}: FormItemProps) {\n const { form, size, listName, layout, labelWidth, disabled: formDisabled } = useFormContext()\n const inputId = useId()\n const errorId = useId()\n\n if (!name) {\n // Render without form control if no name provided\n return <div className={`form-control ${inline ? 'w-auto' : 'w-full'} ${className}`} style={hidden ? { display: 'none' } : undefined}>{children}</div>\n }\n\n // Handle nested field names (for Form.List)\n let fieldName: string\n if (Array.isArray(name)) {\n // If we're inside a Form.List, prepend the list name\n const fullPath = listName ? [listName, ...name] : name\n fieldName = fullPath.join('.')\n } else {\n fieldName = name\n }\n\n // Set initial value if provided\n useEffect(() => {\n if (initialValue !== undefined) {\n const currentValue = form.getValues(fieldName as any)\n if (currentValue === undefined) {\n form.setValue(fieldName as any, initialValue)\n }\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Watch dependencies and re-validate when they change\n const watchedDeps = useWatch({\n control: form.control,\n name: dependencies as any,\n disabled: !dependencies || dependencies.length === 0,\n })\n\n // Use refs to avoid infinite loops\n const formRef = useRef(form)\n formRef.current = form\n const prevDepsRef = useRef<string | undefined>(undefined)\n\n useEffect(() => {\n // Skip if no dependencies\n if (!dependencies || dependencies.length === 0) return\n\n // Skip initial render\n if (prevDepsRef.current === undefined) {\n prevDepsRef.current = JSON.stringify(watchedDeps)\n return\n }\n\n // Only trigger if dependency values actually changed\n const currentDeps = JSON.stringify(watchedDeps)\n if (prevDepsRef.current !== currentDeps) {\n prevDepsRef.current = currentDeps\n formRef.current.trigger(fieldName as any)\n }\n }, [watchedDeps, dependencies, fieldName])\n\n // Get error by traversing the error object path\n const getErrorByPath = (path: string) => {\n const keys = path.split('.')\n let error: any = form.formState.errors\n for (const key of keys) {\n if (!error) break\n error = error[key]\n }\n return error\n }\n\n const error = getErrorByPath(fieldName)\n const errorMessage = error?.message as string | undefined\n\n // Normalize rules to array\n const rulesArray: FormRule[] = rules\n ? Array.isArray(rules) ? rules : [rules]\n : []\n\n // Build validation rules\n const validationRules: any = {}\n const patternValidators: Array<{ pattern: RegExp; message: string }> = []\n const customValidators: Array<(value: any) => boolean | string | Promise<boolean | string>> = []\n\n // Handle top-level required prop\n if (required) {\n validationRules.required = 'This field is required'\n }\n\n // Process each rule\n for (const rule of rulesArray) {\n // Required\n if (rule.required) {\n validationRules.required = typeof rule.required === 'string'\n ? rule.required\n : rule.message || 'This field is required'\n }\n\n // Type validator\n if (rule.type && TYPE_VALIDATORS[rule.type]) {\n patternValidators.push({\n pattern: TYPE_VALIDATORS[rule.type].value,\n message: rule.message || TYPE_VALIDATORS[rule.type].message,\n })\n }\n\n // Min length\n if (rule.min !== undefined) {\n const minValue = typeof rule.min === 'object' ? rule.min.value : rule.min\n const minMessage = typeof rule.min === 'object'\n ? rule.min.message\n : rule.message || `Minimum length is ${minValue} characters`\n validationRules.minLength = { value: minValue, message: minMessage }\n }\n\n // Max length\n if (rule.max !== undefined) {\n const maxValue = typeof rule.max === 'object' ? rule.max.value : rule.max\n const maxMessage = typeof rule.max === 'object'\n ? rule.max.message\n : rule.message || `Maximum length is ${maxValue} characters`\n validationRules.maxLength = { value: maxValue, message: maxMessage }\n }\n\n // Pattern - collect all patterns\n if (rule.pattern) {\n const patternValue = rule.pattern instanceof RegExp ? rule.pattern : rule.pattern.value\n const patternMessage = rule.pattern instanceof RegExp\n ? rule.message || 'Invalid format'\n : rule.pattern.message\n patternValidators.push({ pattern: patternValue, message: patternMessage })\n }\n\n // Custom validator\n if (rule.validate) {\n customValidators.push(rule.validate)\n }\n }\n\n // Combine all pattern and custom validators into a single validate function\n if (patternValidators.length > 0 || customValidators.length > 0) {\n validationRules.validate = async (value: any) => {\n // Skip validation if empty (required rule handles that)\n if (!value && !validationRules.required) return true\n\n // Check all patterns\n for (const { pattern, message } of patternValidators) {\n if (value && !pattern.test(value)) {\n return message\n }\n }\n\n // Run all custom validators\n for (const validator of customValidators) {\n const result = await validator(value)\n if (result !== true) {\n return result\n }\n }\n\n return true\n }\n }\n\n // Normalize validateTrigger to array\n const triggers = Array.isArray(validateTrigger) ? validateTrigger : [validateTrigger]\n const shouldValidateOnChange = triggers.includes('onChange')\n const shouldValidateOnBlur = triggers.includes('onBlur')\n\n // Feedback icons\n const FeedbackIcon = ({ hasError, isValidating }: { hasError: boolean; isValidating: boolean }) => {\n if (isValidating) {\n return (\n <span className=\"loading loading-spinner loading-xs text-base-content/50\" />\n )\n }\n if (hasError) {\n return (\n <svg className=\"w-4 h-4 text-error\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n )\n }\n return (\n <svg className=\"w-4 h-4 text-success\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n }\n\n // Tooltip icon\n const TooltipIcon = () => (\n <div className=\"tooltip tooltip-top ml-1\" data-tip={tooltip}>\n <svg className=\"w-4 h-4 text-base-content/50 cursor-help\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n </div>\n )\n\n return (\n <Controller\n name={fieldName}\n control={form.control}\n rules={validationRules}\n render={({ field, fieldState }) => {\n const { value, onChange, onBlur, ref } = field\n const isValidating = fieldState.isTouched && form.formState.isValidating\n\n // Clone the child element and inject form control props\n const childProps: any = {\n id: inputId,\n ref,\n 'aria-invalid': error ? true : undefined,\n 'aria-describedby': error ? errorId : undefined,\n }\n\n // Handle onBlur based on validateTrigger\n childProps.onBlur = () => {\n onBlur()\n if (shouldValidateOnBlur) {\n form.trigger(fieldName as any)\n }\n }\n\n // Handle different value prop names (e.g., 'checked' for checkboxes)\n if (valuePropName === 'checked') {\n childProps.checked = value\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.checked)\n if (shouldValidateOnChange) {\n form.trigger(fieldName as any)\n }\n }\n } else {\n childProps.value = value || ''\n childProps.onChange = (eventOrValue: any) => {\n // Handle components that pass value directly (e.g., Range, Rating)\n // vs components that pass event object (e.g., Input, Select)\n if (eventOrValue && eventOrValue.target !== undefined) {\n onChange(eventOrValue.target.value)\n } else {\n onChange(eventOrValue)\n }\n if (shouldValidateOnChange) {\n form.trigger(fieldName as any)\n }\n }\n }\n\n // Apply size if specified at form level\n if (size && isValidElement(children)) {\n const existingProps = children.props as any\n if (!existingProps.size) {\n childProps.size = size\n }\n }\n\n // Apply error styling and accessibility\n if (error) {\n childProps.color = 'error'\n childProps['aria-invalid'] = true\n }\n\n // Apply form-level disabled state\n if (formDisabled) {\n childProps.disabled = true\n }\n\n // When wrapped with addons, the child input should be unstyled (the wrapper has the styling)\n const hasAddons = addonBefore || addonAfter\n if (hasAddons) {\n childProps.unstyled = true\n }\n\n const enhancedChild = isValidElement(children)\n ? cloneElement(children as React.ReactElement<any>, childProps)\n : children\n\n const isHorizontal = layout === 'horizontal'\n const isInline = layout === 'inline'\n\n // Size class for floating label\n const floatingSizeClasses: Record<string, string> = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n // Build the input element with optional floating label wrapper\n const renderInputElement = () => {\n const inputWithFeedback = (\n <div className={`${isHorizontal ? 'flex-1' : ''} ${hasFeedback ? 'relative' : ''}`}>\n {enhancedChild}\n {hasFeedback && fieldState.isTouched && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none\">\n <FeedbackIcon hasError={!!error} isValidating={isValidating} />\n </span>\n )}\n </div>\n )\n\n // Floating label variant\n if (floatingLabel) {\n const floatingClasses = [\n 'floating-label',\n size && floatingSizeClasses[size],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={floatingClasses}>\n {enhancedChild}\n <span>{floatingLabel}{required && <span className=\"text-error ml-1\">*</span>}</span>\n </label>\n )\n }\n\n return inputWithFeedback\n }\n\n // Wrap with external addons if specified using DaisyUI input wrapper pattern\n const renderWithAddons = (input: React.ReactNode) => {\n if (!addonBefore && !addonAfter) return input\n\n const addonClasses = [\n 'input',\n 'input-bordered',\n 'flex',\n 'items-center',\n 'gap-2',\n size && floatingSizeClasses[size],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={addonClasses}>\n {addonBefore && <span className=\"text-base-content/70\">{addonBefore}</span>}\n {input}\n {addonAfter && <span className=\"text-base-content/70\">{addonAfter}</span>}\n </label>\n )\n }\n\n return (\n <div className={`form-control ${inline ? 'w-auto' : 'w-full'} ${isHorizontal ? 'mb-4' : ''} ${isInline ? 'inline-flex mr-4' : ''} ${className}`} style={hidden ? { display: 'none' } : undefined}>\n <div className={isHorizontal ? 'flex items-center gap-4' : ''}>\n {label && !floatingLabel && (\n <label\n htmlFor={inputId}\n className={`block text-sm font-medium ${isHorizontal ? 'flex-shrink-0 text-right' : ''} ${!isHorizontal && !isInline ? 'mb-1' : ''}`}\n style={isHorizontal ? { width: labelWidth } : undefined}\n >\n <span className=\"flex items-center\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n {tooltip && <TooltipIcon />}\n </span>\n </label>\n )}\n {renderWithAddons(renderInputElement())}\n </div>\n {!isHorizontal && !inline && (\n <p id={errorId} className={`validator-hint ${errorMessage ? '!visible text-error' : ''} min-h-[1.25rem]`} role={errorMessage ? 'alert' : undefined}>\n {errorMessage || (help && <span className=\"text-base-content/70\">{help}</span>) || '\\u00A0'}\n </p>\n )}\n {isHorizontal && (errorMessage || help) && (\n <p id={errorId} className={`validator-hint ${errorMessage ? '!visible text-error' : ''} min-h-[1.25rem]`} role={errorMessage ? 'alert' : undefined}>\n {errorMessage || (help && <span className=\"text-base-content/70\">{help}</span>)}\n </p>\n )}\n {extra && (\n <div className=\"text-sm text-base-content/60 mt-1\">{extra}</div>\n )}\n </div>\n )\n }}\n />\n )\n}\n\nfunction FormList<TFieldValues extends FieldValues = FieldValues>({\n name,\n children,\n}: FormListProps<TFieldValues>) {\n const { form, layout, size, disabled } = useFormContext()\n\n const { fields, append, remove, move } = useFieldArray({\n control: form.control,\n name,\n })\n\n // Add name (index) to each field for proper path construction\n const fieldsWithName = fields.map((field, index) => ({\n ...field,\n name: index,\n }))\n\n return (\n <FormContext.Provider value={{ form, layout, size, listName: name as string, disabled }}>\n {children(fieldsWithName as any, {\n add: append,\n remove,\n move,\n })}\n </FormContext.Provider>\n )\n}\n\n// Enhanced hook to expose full form API\nexport function useFormInstance<TFieldValues extends FieldValues = FieldValues>() {\n const formInstance = useForm<TFieldValues>()\n\n // Add convenience methods to the instance\n const enhancedInstance = formInstance as typeof formInstance & {\n setFieldValue: typeof formInstance.setValue\n getFieldValue: (name: any) => any\n getFieldsValue: typeof formInstance.getValues\n setFieldsValue: (values: any) => void\n validateFields: typeof formInstance.trigger\n resetFields: typeof formInstance.reset\n isFieldTouched: (name: string) => boolean\n getFieldError: (name: string) => string | undefined\n }\n\n // Add the alias methods\n enhancedInstance.setFieldValue = formInstance.setValue\n enhancedInstance.getFieldValue = (name: any) => formInstance.getValues(name)\n enhancedInstance.getFieldsValue = formInstance.getValues\n enhancedInstance.setFieldsValue = (values: any) => {\n Object.keys(values).forEach((key) => {\n formInstance.setValue(key as any, values[key])\n })\n }\n enhancedInstance.validateFields = formInstance.trigger\n enhancedInstance.resetFields = formInstance.reset\n enhancedInstance.isFieldTouched = (name: string) => {\n const touched = formInstance.formState.touchedFields as any\n return !!touched[name]\n }\n enhancedInstance.getFieldError = (name: string) => {\n const errors = formInstance.formState.errors as any\n return errors[name]?.message as string | undefined\n }\n\n return enhancedInstance\n}\n\nexport interface FormErrorListProps {\n /** Specific field names to show errors for (shows all errors if not specified) */\n fields?: string[]\n /** Custom className */\n className?: string\n}\n\nfunction FormErrorList({ fields, className = '' }: FormErrorListProps) {\n const { form } = useFormContext()\n const { errors } = form.formState\n\n // Flatten nested errors into a list\n const flattenErrors = (obj: any, prefix = ''): Array<{ field: string; message: string }> => {\n const result: Array<{ field: string; message: string }> = []\n\n for (const key in obj) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value?.message) {\n result.push({ field: fullKey, message: value.message as string })\n } else if (typeof value === 'object' && value !== null) {\n result.push(...flattenErrors(value, fullKey))\n }\n }\n\n return result\n }\n\n const allErrors = flattenErrors(errors)\n const filteredErrors = fields\n ? allErrors.filter(e => fields.includes(e.field))\n : allErrors\n\n if (filteredErrors.length === 0) {\n return null\n }\n\n return (\n <ul className={`text-error text-sm space-y-1 ${className}`} role=\"alert\">\n {filteredErrors.map((error, index) => (\n <li key={`${error.field}-${index}`} className=\"flex items-start gap-2\">\n <svg className=\"w-4 h-4 mt-0.5 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <span>{error.message}</span>\n </li>\n ))}\n </ul>\n )\n}\n\nexport const Form = Object.assign(FormRoot, {\n Item: FormItem,\n List: FormList,\n ErrorList: FormErrorList,\n useForm: useFormInstance,\n})\n\nexport type { UseFormReturn as FormInstance }\n"],"names":["FormContext","createContext","TYPE_VALIDATORS","useFormContext","context","useContext","FormRoot","externalForm","onFinish","onFinishFailed","initialValues","layout","labelWidth","size","disabled","children","className","noValidate","props","internalForm","useForm","form","handleSubmit","e","errors","errorFields","flattenErrors","obj","prefix","key","fullKey","value","handleReset","jsx","FormItem","name","label","floatingLabel","help","required","rules","valuePropName","inline","tooltip","extra","hasFeedback","dependencies","validateTrigger","initialValue","hidden","addonBefore","addonAfter","listName","formDisabled","inputId","useId","errorId","fieldName","useEffect","watchedDeps","useWatch","formRef","useRef","prevDepsRef","currentDeps","error","path","keys","errorMessage","rulesArray","validationRules","patternValidators","customValidators","rule","minValue","minMessage","maxValue","maxMessage","patternValue","patternMessage","pattern","message","validator","result","triggers","shouldValidateOnChange","shouldValidateOnBlur","FeedbackIcon","hasError","isValidating","TooltipIcon","Controller","field","fieldState","onChange","onBlur","ref","childProps","eventOrValue","isValidElement","enhancedChild","cloneElement","isHorizontal","isInline","floatingSizeClasses","renderInputElement","inputWithFeedback","jsxs","floatingClasses","renderWithAddons","input","addonClasses","FormList","fields","append","remove","move","useFieldArray","fieldsWithName","index","useFormInstance","formInstance","enhancedInstance","values","FormErrorList","allErrors","filteredErrors","Form"],"mappings":"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"}
package/dist/index42.js CHANGED
@@ -1,31 +1,31 @@
1
- import { jsx as y, jsxs as m } from "react/jsx-runtime";
2
- import { forwardRef as at, useRef as ft, useCallback as z, useState as G, useEffect as H } from "react";
3
- function S(e, r, c) {
4
- let l = "", s = 0;
5
- for (let p = 0; p < r.length && s <= e.length; p++) {
6
- const b = r[p];
7
- b === "#" || b === "A" || b === "*" ? s < e.length ? (l += e[s], s++) : l += c : l += b;
1
+ import { jsx as p, jsxs as $ } from "react/jsx-runtime";
2
+ import { forwardRef as vt, useRef as It, useCallback as B, useState as O, useEffect as Q } from "react";
3
+ function X(e, r, s) {
4
+ let c = "", l = 0;
5
+ for (let d = 0; d < r.length && l <= e.length; d++) {
6
+ const b = r[d];
7
+ b === "#" || b === "A" || b === "*" ? l < e.length ? (c += e[l], l++) : c += s : c += b;
8
8
  }
9
- return l;
9
+ return c;
10
10
  }
11
- function J(e, r, c) {
12
- let l = "";
13
- for (let s = 0; s < e.length && s < r.length; s++) {
14
- const p = r[s];
15
- (p === "#" || p === "A" || p === "*") && e[s] !== c && (l += e[s]);
11
+ function Y(e, r, s) {
12
+ let c = "";
13
+ for (let l = 0; l < e.length && l < r.length; l++) {
14
+ const d = r[l];
15
+ (d === "#" || d === "A" || d === "*") && e[l] !== s && (c += e[l]);
16
16
  }
17
- return l;
17
+ return c;
18
18
  }
19
- function pt(e, r) {
19
+ function Ct(e, r) {
20
20
  return r === "#" ? /\d/.test(e) : r === "A" ? /[a-zA-Z]/.test(e) : r === "*" ? /[a-zA-Z0-9]/.test(e) : !1;
21
21
  }
22
- function k(e, r) {
23
- for (let c = r; c < e.length; c++)
24
- if (e[c] === "#" || e[c] === "A" || e[c] === "*")
25
- return c;
22
+ function lt(e, r) {
23
+ for (let s = r; s < e.length; s++)
24
+ if (e[s] === "#" || e[s] === "A" || e[s] === "*")
25
+ return s;
26
26
  return e.length;
27
27
  }
28
- const dt = ({ onClick: e, className: r }) => /* @__PURE__ */ y(
28
+ const Nt = ({ onClick: e, className: r }) => /* @__PURE__ */ p(
29
29
  "button",
30
30
  {
31
31
  type: "button",
@@ -33,42 +33,46 @@ const dt = ({ onClick: e, className: r }) => /* @__PURE__ */ y(
33
33
  className: `flex items-center justify-center opacity-50 hover:opacity-100 transition-opacity ${r || ""}`,
34
34
  "aria-label": "Clear input",
35
35
  tabIndex: -1,
36
- children: /* @__PURE__ */ y("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ y("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
36
+ children: /* @__PURE__ */ p("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ p("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
37
37
  }
38
- ), gt = at(
38
+ ), At = vt(
39
39
  ({
40
40
  type: e = "text",
41
41
  size: r,
42
- color: c,
43
- status: l,
44
- ghost: s = !1,
45
- bordered: p = !0,
42
+ color: s,
43
+ status: c,
44
+ ghost: l = !1,
45
+ bordered: d = !0,
46
46
  className: b = "",
47
47
  mask: t,
48
- maskPlaceholder: u = "_",
49
- allowClear: R,
50
- onClear: O,
51
- prefix: B,
52
- suffix: A,
53
- errorId: Q,
48
+ maskPlaceholder: f = "_",
49
+ allowClear: C,
50
+ onClear: q,
51
+ prefix: E,
52
+ suffix: N,
53
+ addonBefore: z,
54
+ addonAfter: F,
55
+ floatingLabel: M,
56
+ errorId: K,
57
+ unstyled: ot = !1,
54
58
  value: i,
55
- defaultValue: N,
56
- onChange: a,
57
- onKeyDown: V,
58
- disabled: Z,
59
- required: W,
60
- ...U
61
- }, tt) => {
62
- const et = {
59
+ defaultValue: A,
60
+ onChange: u,
61
+ onKeyDown: R,
62
+ disabled: L,
63
+ required: _,
64
+ ...P
65
+ }, ct) => {
66
+ const m = {
63
67
  xs: "input-xs",
64
68
  sm: "input-sm",
65
69
  md: "input-md",
66
70
  lg: "input-lg",
67
71
  xl: "input-xl"
68
- }, nt = l ? {
72
+ }, k = c ? {
69
73
  error: "input-error",
70
74
  warning: "input-warning"
71
- }[l] : c ? {
75
+ }[c] : s ? {
72
76
  neutral: "input-neutral",
73
77
  primary: "input-primary",
74
78
  secondary: "input-secondary",
@@ -77,149 +81,182 @@ const dt = ({ onClick: e, className: r }) => /* @__PURE__ */ y(
77
81
  success: "input-success",
78
82
  warning: "input-warning",
79
83
  error: "input-error"
80
- }[c] : "", _ = [
84
+ }[s] : "", tt = z || F, ut = tt || ot ? ["grow", "bg-transparent", "border-0", "outline-none", "focus:outline-none", b].filter(Boolean).join(" ") : [
81
85
  "input",
82
- !p && "border-0",
83
- s && "input-ghost",
84
- r && et[r],
85
- nt,
86
+ !d && "border-0",
87
+ l && "input-ghost",
88
+ r && m[r],
89
+ k,
86
90
  b
87
- ].filter(Boolean).join(" "), rt = ft(null), d = tt || rt, it = z(() => t ? J(i ?? N ?? "", t, u) : "", [t, i, N, u]), [j, E] = G(it), [T, $] = G(null);
88
- H(() => {
89
- t && i !== void 0 && E(J(i, t, u));
90
- }, [t, i, u]), H(() => {
91
- T !== null && d.current && (d.current.setSelectionRange(T, T), $(null));
92
- }, [T, d]);
93
- const X = z(
91
+ ].filter(Boolean).join(" "), at = It(null), h = ct || at, pt = B(() => t ? Y(i ?? A ?? "", t, f) : "", [t, i, A, f]), [T, W] = O(pt), [S, D] = O(null);
92
+ Q(() => {
93
+ t && i !== void 0 && W(Y(i, t, f));
94
+ }, [t, i, f]), Q(() => {
95
+ S !== null && h.current && (h.current.setSelectionRange(S, S), D(null));
96
+ }, [S, h]);
97
+ const nt = B(
94
98
  (n) => {
95
99
  if (!t) {
96
- a?.(n);
100
+ u?.(n);
97
101
  return;
98
102
  }
99
- const f = n.target, w = f.value, I = J(w, t, u);
100
- let x = "", v = 0;
101
- for (let g = 0; g < t.length && v < I.length; g++) {
102
- const h = t[g];
103
- (h === "#" || h === "A" || h === "*") && (pt(I[v], h) && (x += I[v]), v++);
103
+ const a = n.target, V = a.value, v = Y(V, t, f);
104
+ let w = "", y = 0;
105
+ for (let g = 0; g < t.length && y < v.length; g++) {
106
+ const x = t[g];
107
+ (x === "#" || x === "A" || x === "*") && (Ct(v[y], x) && (w += v[y]), y++);
104
108
  }
105
- E(x);
106
- const L = S(x, t, u);
107
- let o = k(t, 0), C = 0;
109
+ W(w);
110
+ const Z = X(w, t, f);
111
+ let o = lt(t, 0), I = 0;
108
112
  for (let g = 0; g < t.length; g++) {
109
- const h = t[g];
110
- (h === "#" || h === "A" || h === "*") && C < x.length && (C++, o = g + 1);
113
+ const x = t[g];
114
+ (x === "#" || x === "A" || x === "*") && I < w.length && (I++, o = g + 1);
111
115
  }
112
- o = k(t, o), o > t.length && (o = t.length), $(o);
113
- const ut = {
116
+ o = lt(t, o), o > t.length && (o = t.length), D(o);
117
+ const yt = {
114
118
  ...n,
115
- target: { ...f, value: L },
116
- currentTarget: { ...f, value: L }
119
+ target: { ...a, value: Z },
120
+ currentTarget: { ...a, value: Z }
117
121
  };
118
- a?.(ut);
122
+ u?.(yt);
119
123
  },
120
- [t, u, a]
121
- ), Y = z(
124
+ [t, f, u]
125
+ ), et = B(
122
126
  (n) => {
123
127
  if (!t) {
124
- V?.(n);
128
+ R?.(n);
125
129
  return;
126
130
  }
127
131
  if (n.key === "Backspace") {
128
132
  n.preventDefault();
129
- const f = j.slice(0, -1);
130
- E(f);
131
- let w = 0, I = 0;
133
+ const a = T.slice(0, -1);
134
+ W(a);
135
+ let V = 0, v = 0;
132
136
  for (let o = 0; o < t.length; o++) {
133
- const C = t[o];
134
- if (C === "#" || C === "A" || C === "*")
135
- if (I < f.length)
136
- I++, w = o + 1;
137
+ const I = t[o];
138
+ if (I === "#" || I === "A" || I === "*")
139
+ if (v < a.length)
140
+ v++, V = o + 1;
137
141
  else {
138
- w = o;
142
+ V = o;
139
143
  break;
140
144
  }
141
145
  }
142
- $(w);
143
- const x = S(f, t, u), v = n.currentTarget, L = {
144
- target: { ...v, value: x },
145
- currentTarget: { ...v, value: x }
146
+ D(V);
147
+ const w = X(a, t, f), y = n.currentTarget, Z = {
148
+ target: { ...y, value: w },
149
+ currentTarget: { ...y, value: w }
146
150
  };
147
- a?.(L);
151
+ u?.(Z);
148
152
  }
149
- V?.(n);
153
+ R?.(n);
150
154
  },
151
- [t, u, j, a, V]
152
- ), [q, D] = G(i ?? N ?? "");
153
- H(() => {
154
- i !== void 0 && D(i);
155
+ [t, f, T, u, R]
156
+ ), [G, H] = O(i ?? A ?? "");
157
+ Q(() => {
158
+ i !== void 0 && H(i);
155
159
  }, [i]);
156
- const ct = z((n) => {
157
- D(n.target.value), a?.(n);
158
- }, [a]), st = z(() => {
159
- if (D(""), E(""), O?.(), a && d.current) {
160
+ const rt = B((n) => {
161
+ H(n.target.value), u?.(n);
162
+ }, [u]), ft = B(() => {
163
+ if (H(""), W(""), q?.(), u && h.current) {
160
164
  const n = {
161
- target: { ...d.current, value: "" },
162
- currentTarget: { ...d.current, value: "" }
165
+ target: { ...h.current, value: "" },
166
+ currentTarget: { ...h.current, value: "" }
163
167
  };
164
- a(n);
168
+ u(n);
165
169
  }
166
- }, [O, a, d]), F = R && (t ? j : q) && !Z, ot = typeof R == "object" && R.clearIcon ? R.clearIcon : null, M = {};
167
- l === "error" && (M["aria-invalid"] = !0), Q && (M["aria-describedby"] = Q), W && (M["aria-required"] = !0);
168
- const K = B || A || R, P = (n, f, w) => /* @__PURE__ */ y(
170
+ }, [q, u, h]), J = C && (t ? T : G) && !L, dt = typeof C == "object" && C.clearIcon ? C.clearIcon : null, j = {};
171
+ c === "error" && (j["aria-invalid"] = !0), K && (j["aria-describedby"] = K), _ && (j["aria-required"] = !0);
172
+ const U = E || N || C, ht = {
173
+ xs: "input-xs",
174
+ sm: "input-sm",
175
+ md: "input-md",
176
+ lg: "input-lg",
177
+ xl: "input-xl"
178
+ }, it = t ? X(T, t, f) : void 0, st = (n) => /* @__PURE__ */ p(
169
179
  "input",
170
180
  {
171
- ref: d,
181
+ ref: h,
172
182
  type: t ? "text" : e,
173
- className: n,
174
- value: f ?? i,
175
- defaultValue: !f && !i ? N : void 0,
176
- onChange: w ?? a,
177
- onKeyDown: t ? Y : V,
178
- disabled: Z,
179
- required: W,
180
- ...M,
181
- ...U
183
+ className: [
184
+ ut,
185
+ U && "w-full",
186
+ E && "pl-10",
187
+ (N || J) && "pr-10",
188
+ n
189
+ ].filter(Boolean).join(" "),
190
+ value: it ?? (i !== void 0 ? i : U ? G : i),
191
+ defaultValue: i === void 0 && !t ? A : void 0,
192
+ onChange: t ? nt : U ? rt : u,
193
+ onKeyDown: t ? et : R,
194
+ disabled: L,
195
+ required: _,
196
+ ...j,
197
+ ...P
182
198
  }
183
- );
184
- if (!t && !K)
185
- return P(_);
186
- if (t && !K) {
187
- const n = S(j, t, u);
188
- return P(_, n, X);
189
- }
190
- const lt = t ? S(j, t, u) : void 0;
191
- return /* @__PURE__ */ m("div", { className: "relative flex items-center", children: [
192
- B && /* @__PURE__ */ y("span", { className: "absolute left-3 flex items-center text-base-content/70 pointer-events-none z-10", children: B }),
193
- /* @__PURE__ */ y(
194
- "input",
195
- {
196
- ref: d,
197
- type: t ? "text" : e,
198
- className: [
199
- _,
200
- "w-full",
201
- B && "pl-10",
202
- (A || F) && "pr-10"
203
- ].filter(Boolean).join(" "),
204
- value: lt ?? (i !== void 0 ? i : q),
205
- defaultValue: i === void 0 && !t ? N : void 0,
206
- onChange: t ? X : ct,
207
- onKeyDown: t ? Y : V,
208
- disabled: Z,
209
- required: W,
210
- ...M,
211
- ...U
212
- }
213
- ),
214
- (A || F) && /* @__PURE__ */ m("span", { className: "absolute right-3 flex items-center gap-1 z-10", children: [
215
- F && (ot || /* @__PURE__ */ y(dt, { onClick: st })),
216
- A && /* @__PURE__ */ y("span", { className: "text-base-content/70", children: A })
199
+ ), gt = (n) => U ? /* @__PURE__ */ $("div", { className: `relative flex items-center ${n || ""}`, children: [
200
+ E && /* @__PURE__ */ p("span", { className: "absolute left-3 flex items-center text-base-content/70 pointer-events-none z-10", children: E }),
201
+ st(),
202
+ (N || J) && /* @__PURE__ */ $("span", { className: "absolute right-3 flex items-center gap-1 z-10", children: [
203
+ J && (dt || /* @__PURE__ */ p(Nt, { onClick: ft })),
204
+ N && /* @__PURE__ */ p("span", { className: "text-base-content/70", children: N })
217
205
  ] })
218
- ] });
206
+ ] }) : st(n), xt = (n) => {
207
+ if (!M) return n;
208
+ const a = [
209
+ "floating-label",
210
+ r && ht[r]
211
+ ].filter(Boolean).join(" ");
212
+ return /* @__PURE__ */ $("label", { className: a, children: [
213
+ n,
214
+ /* @__PURE__ */ p("span", { children: M })
215
+ ] });
216
+ }, bt = (n) => {
217
+ if (!tt) return n;
218
+ const a = [
219
+ "input",
220
+ "input-bordered",
221
+ "flex",
222
+ "items-center",
223
+ "gap-2",
224
+ r && m[r],
225
+ k
226
+ ].filter(Boolean).join(" ");
227
+ return /* @__PURE__ */ $("label", { className: a, children: [
228
+ z && /* @__PURE__ */ p("span", { className: "text-base-content/70", children: z }),
229
+ n,
230
+ F && /* @__PURE__ */ p("span", { className: "text-base-content/70", children: F })
231
+ ] });
232
+ }, wt = gt(
233
+ M ? "input input-bordered w-full" : void 0
234
+ );
235
+ return bt(xt(
236
+ M ? (
237
+ // For floating label, use raw input (label wrapper provides styling)
238
+ /* @__PURE__ */ p(
239
+ "input",
240
+ {
241
+ ref: h,
242
+ type: t ? "text" : e,
243
+ className: "input input-bordered w-full",
244
+ value: it ?? (i !== void 0 ? i : G),
245
+ defaultValue: i === void 0 && !t ? A : void 0,
246
+ onChange: t ? nt : rt,
247
+ onKeyDown: t ? et : R,
248
+ disabled: L,
249
+ required: _,
250
+ ...j,
251
+ ...P
252
+ }
253
+ )
254
+ ) : wt
255
+ ));
219
256
  }
220
257
  );
221
- gt.displayName = "Input";
258
+ At.displayName = "Input";
222
259
  export {
223
- gt as Input
260
+ At as Input
224
261
  };
225
262
  //# sourceMappingURL=index42.js.map