@dragonmastery/zinia-forms-core 0.3.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin.ts","../src/components/createBaseComponents.ts","../src/components/createTypedSelectField.ts","../src/components/createTypedArrayField.ts","../src/metadata/createMetadataProps.ts","../src/utils/pathUtils.ts","../src/components/generateFieldComponents.ts","../src/components/createBaseDisplayComponents.ts","../src/components/generateDisplayComponents.ts","../src/utils/objectPath.ts","../src/utils/valueComparison.ts","../src/utils/schemaUtils.ts","../src/validation/fieldValidation.ts","../src/fields/fieldOperations.ts","../src/registry/metadataRegistry.ts","../src/registry/registerMetadata.ts","../src/registry/schemaAttachment.ts","../src/utils/labelGeneration.ts","../src/metadata/extractFieldMetadata.ts","../src/metadata/extractAllMetadata.ts","../src/hooks/useFormMetadata.ts","../src/utils/Logger.ts","../src/utils/NextTickQueueManager.ts","../src/utils/ReactiveUpdater.ts","../src/hooks/useFormState.ts","../src/validation/formValidation.ts","../src/hooks/useFormValidation.ts","../src/persistence/localStoragePersistence.ts","../src/schema/handlers/objectHandler.ts","../src/schema/handlers/primitiveHandlers.ts","../src/schema/defaultValues.ts","../src/useForm.ts","../src/fields/daisy_ui/LoadingDisplay.tsx","../src/fields/daisy_ui/ErrorDisplay.tsx","../src/fields/daisy_ui/NoDataDisplay.tsx","../src/components/createStateComponents.ts","../src/useDisplay.ts","../src/components/createDataTableComponents.ts","../src/hooks/useDataTableState.ts","../src/useDataTable.ts","../src/hooks/useCursorDataTableState.ts","../src/useCursorDataTable.ts","../src/useDeleteModal.ts","../src/fields/daisy_ui/ArrayFieldDaisy.tsx","../src/fields/daisy_ui/CheckboxFieldDaisy.tsx","../src/fields/daisy_ui/CurrencyFieldDaisy.tsx","../src/fields/utils/formatDateValue.ts","../src/fields/daisy_ui/DateFieldDaisy.tsx","../src/fields/utils/formatDateTimeValue.ts","../src/fields/daisy_ui/DateTimeLocalFieldDaisy.tsx","../src/fields/daisy_ui/EmailFieldDaisy.tsx","../src/fields/daisy_ui/FileFieldDaisy.tsx","../src/fields/daisy_ui/FormDaisy.tsx","../src/fields/daisy_ui/FormErrorsSummary.tsx","../src/fields/daisy_ui/NumberFieldDaisy.tsx","../src/fields/daisy_ui/PasswordFieldDaisy.tsx","../src/fields/daisy_ui/RadioFieldDaisy.tsx","../src/fields/daisy_ui/RangeFieldDaisy.tsx","../src/fields/daisy_ui/ResetButtonDaisy.tsx","../src/fields/daisy_ui/SearchFieldDaisy.tsx","../src/fields/types/SelectFieldProps.ts","../src/utils/propNormalization.ts","../src/fields/daisy_ui/SelectFieldDaisy.tsx","../src/fields/daisy_ui/SubmitButtonDaisy.tsx","../src/fields/daisy_ui/TelFieldDaisy.tsx","../src/fields/daisy_ui/TextareaFieldDaisy.tsx","../src/fields/daisy_ui/TextFieldDaisy.tsx","../src/fields/daisy_ui/TimeFieldDaisy.tsx","../src/fields/daisy_ui/ToppingsFieldDaisy.tsx","../src/fields/daisy_ui/TransferListFieldDaisy.tsx","../src/fields/daisy_ui/UrlFieldDaisy.tsx","../src/fields/daisy_ui/DisplayDaisy.tsx","../src/fields/daisy_ui/DisplayFieldDaisy.tsx","../src/fields/daisy_ui/DeleteModalDaisy.tsx","../src/fields/daisy_ui/datatable/helpers/filterHelpers.ts","../src/fields/daisy_ui/datatable/helpers/sortHelpers.tsx","../src/fields/daisy_ui/datatable/helpers/formatHelpers.ts","../src/fields/daisy_ui/datatable/helpers/actionHelpers.tsx","../src/fields/daisy_ui/datatable/components/DesktopTable.tsx","../src/fields/daisy_ui/datatable/filters/SelectFilter.tsx","../src/fields/daisy_ui/datatable/helpers/debounce.ts","../src/fields/daisy_ui/datatable/filters/TextFilter.tsx","../src/fields/daisy_ui/datatable/filters/NumberFilter.tsx","../src/fields/daisy_ui/datatable/filters/BooleanFilter.tsx","../src/fields/daisy_ui/datatable/components/FiltersRow.tsx","../src/fields/daisy_ui/datatable/components/LoadingSkeletons.tsx","../src/fields/daisy_ui/datatable/components/SortDrawer.tsx","../src/fields/daisy_ui/datatable/components/MobileCards.tsx","../src/fields/daisy_ui/datatable/components/Pagination.tsx","../src/fields/daisy_ui/datatable/components/SearchInput.tsx","../src/fields/daisy_ui/datatable/components/SelectionActions.tsx","../src/fields/daisy_ui/DataTableDaisy.tsx","../src/styles/daisyUI.ts","../src/fields/plain/CheckboxFieldPlain.tsx","../src/fields/plain/CurrencyFieldPlain.tsx","../src/fields/plain/DateFieldPlain.tsx","../src/fields/plain/DateTimeLocalFieldPlain.tsx","../src/fields/plain/EmailFieldPlain.tsx","../src/fields/plain/FileFieldPlain.tsx","../src/fields/plain/FormPlain.tsx","../src/fields/plain/NumberFieldPlain.tsx","../src/fields/plain/PasswordFieldPlain.tsx","../src/fields/plain/RadioFieldPlain.tsx","../src/fields/plain/RangeFieldPlain.tsx","../src/fields/plain/ResetButtonPlain.tsx","../src/fields/plain/SearchFieldPlain.tsx","../src/fields/plain/SelectFieldPlain.tsx","../src/fields/plain/SubmitButtonPlain.tsx","../src/fields/plain/TelFieldPlain.tsx","../src/fields/plain/TextareaFieldPlain.tsx","../src/fields/plain/TextFieldPlain.tsx","../src/fields/plain/TimeFieldPlain.tsx","../src/fields/plain/UrlFieldPlain.tsx","../src/fields/plain/DisplayPlain.tsx","../src/fields/plain/DisplayFieldPlain.tsx","../src/styles/plain.ts","../src/styles/helpers.ts","../src/icons/ActionIcons.ts"],"names":["z","reactive","isLoading","nextTick","options","validateField","watch","jsx","jsxs","computed","loadData","LoadingDisplay","ErrorDisplay","NoDataDisplay","provide","ref","unref","isTouched","inject","getCurrentInstance","Fragment","_","formatTimeValue","items","result"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Zinia Forms Plugin\n * Allows registering custom render styles at the application level\n */\n\nimport type { App } from 'vue';\nimport type { StyleCreators } from './types/styleCreators';\n\n// Store for registered styles\nconst registeredStyles: Record<string, StyleCreators> = {};\n\n// Default style to use if none specified\nlet defaultStyle = 'plain';\n\n/**\n * Plugin options for Zinia\n */\nexport interface ZiniaPluginOptions {\n /**\n * Map of style names to style creators\n */\n styles?: Record<string, StyleCreators>;\n\n /**\n * Default style to use if none specified in useForm\n */\n defaultStyle?: string;\n}\n\n/**\n * Vue plugin for Zinia Forms\n */\nexport const ZiniaPlugin = {\n install(app: App, options?: ZiniaPluginOptions) {\n // Register provided styles\n if (options?.styles) {\n Object.entries(options.styles).forEach(([name, creators]) => {\n registeredStyles[name] = creators;\n });\n }\n\n // Set default style if provided\n if (options?.defaultStyle && registeredStyles[options.defaultStyle]) {\n defaultStyle = options.defaultStyle;\n }\n\n // Make styles available globally\n app.config.globalProperties.$ziniaStyles = registeredStyles;\n app.provide('ziniaStyles', registeredStyles);\n app.provide('ziniaDefaultStyle', defaultStyle);\n },\n};\n\n/**\n * Get a registered style by name\n *\n * @param styleName Name of the style to get\n * @returns Style creators for the requested style or undefined if not found\n */\nexport function getRegisteredStyle(styleName?: string): StyleCreators | undefined {\n if (!styleName) return registeredStyles[defaultStyle];\n return registeredStyles[styleName];\n}\n\n/**\n * Check if a style is registered\n *\n * @param styleName Name of the style to check\n * @returns True if the style is registered\n */\nexport function hasRegisteredStyle(styleName: string): boolean {\n return !!registeredStyles[styleName];\n}\n\n/**\n * Get the default style name\n *\n * @returns Name of the default style\n */\nexport function getDefaultStyle(): string {\n return defaultStyle;\n}\n\n/**\n * Get all registered style names\n *\n * @returns Array of registered style names\n */\nexport function getRegisteredStyleNames(): string[] {\n return Object.keys(registeredStyles);\n}\n\n/**\n * Register a style at runtime\n * Useful for dynamically loading styles\n *\n * @param styleName Name of the style to register\n * @param creators Style creators for the style\n */\nexport function registerStyle(styleName: string, creators: StyleCreators): void {\n registeredStyles[styleName] = creators;\n}\n","/**\n * Functions for creating base form components\n */\n\nimport { z } from 'zod';\nimport { getDefaultStyle, getRegisteredStyle } from '../plugin';\nimport type { RegisteredStyleName } from '../types/registeredStyles';\n\n/**\n * Create base form components for a schema\n *\n * @param schema The Zod schema for the form\n * @param renderStyle The style to use for rendering\n * @returns Base form components (Form, SubmitButton, ResetButton)\n */\nexport function createBaseComponents<T extends z.ZodObject<any>>(schema: T, styleName?: RegisteredStyleName) {\n type FormType = z.infer<typeof schema>;\n\n // Get the style creators from registered styles\n const styleToUse = styleName || getDefaultStyle();\n const styleCreators = getRegisteredStyle(styleToUse);\n\n if (!styleCreators) {\n throw new Error(`Render style \"${styleToUse}\" is not registered. Make sure to register it with the ZiniaPlugin.`);\n }\n\n // Create the Form, SubmitButton, and ResetButton components\n const Form = styleCreators.createForm<FormType>();\n const SubmitButton = styleCreators.createSubmitButton<FormType>();\n const ResetButton = styleCreators.createResetButton<FormType>();\n const FormErrorsSummary = styleCreators.createFormErrorsSummary();\n\n return {\n Form,\n SubmitButton,\n ResetButton,\n FormErrorsSummary,\n };\n}\n","/**\n * Functions for creating type-safe select fields\n */\n\nimport type { FunctionalComponent } from 'vue';\nimport type { SelectFieldProps } from '../fields/types/SelectFieldProps';\nimport type { FieldPathToEnum } from '../types/componentTypes';\nimport type { Path } from '../utils/paths';\n\n/**\n * Create a factory function that returns a properly typed SelectField based on the field path\n *\n * @param baseSelectField The base select field component\n * @param fieldPath The field path to create a select field for\n * @returns A factory function that creates a type-safe select field\n */\nexport function createTypedSelectField<T, P extends Path<T>>(\n baseSelectField: FunctionalComponent<SelectFieldProps<T>>,\n fieldPath: P,\n) {\n // This is the key: We need to capture the specific enum type for this field path\n // We use FieldPathToEnum to extract the enum type from the field path\n return <E extends FieldPathToEnum<T, P> = FieldPathToEnum<T, P>>(\n props: Omit<SelectFieldProps<T>, 'name' | 'valueToLabel'> & {\n valueToLabel: Record<E, string>; // This ensures valueToLabel is properly typed to the specific enum\n },\n context?: any,\n ) => {\n const fullProps = {\n ...props,\n name: fieldPath,\n };\n return baseSelectField(fullProps as any, context || { attrs: {} });\n };\n}\n\n/**\n * Type-safe select field component with valueToLabel based on field path\n */\nexport interface TypedSelectFieldComponent<T> {\n <P extends Path<T>>(\n props: Omit<SelectFieldProps<T>, 'valueToLabel'> & {\n name: P;\n valueToLabel?: Record<string, string>;\n },\n ): ReturnType<FunctionalComponent>;\n}\n","/**\n * Functions for creating type-safe array fields\n */\n\nimport type { FunctionalComponent } from 'vue';\nimport type { ArrayFieldProps } from '../fields/types/ArrayFieldProps';\nimport type { ArrayItemType } from '../types/componentTypes';\nimport type { FieldMetadata } from '../types/fieldMetadataTypes';\nimport type { Path } from '../utils/paths';\n\n/**\n * Create a factory function that returns a properly typed ArrayField based on the field path\n * This preserves the ItemType so that Vue's template slots are properly typed\n *\n * @param baseArrayField The base array field component\n * @param fieldPath The field path to create an array field for\n * @param metadata Optional metadata to apply to the field\n * @returns A properly typed array field component with slot types preserved\n */\nexport function createTypedArrayField<T, P extends Path<T>>(\n baseArrayField: FunctionalComponent<ArrayFieldProps<T, any>, {}, any, {}>,\n fieldPath: P,\n metadata?: FieldMetadata,\n) {\n // Extract the array item type for this field path\n type ItemType = ArrayItemType<T, P>;\n\n // Define the slots type explicitly\n type ArrayFieldSlots = {\n itemRenderer: (props: { item: ItemType; index: number; getFieldName: (fieldPath: string) => string }) => any;\n availableItemRenderer: (props: { item: ItemType; index: number }) => any;\n default: () => any;\n };\n\n // Create metadata props if provided\n const metadataProps: Partial<ArrayFieldProps<T, ItemType>> = metadata\n ? {\n label: metadata.label,\n description: metadata.helpText,\n required: metadata.isRequired,\n disabled: metadata.disabled,\n // Add other metadata fields as needed\n }\n : {};\n\n // Create a typed wrapper component that preserves the ItemType in its type signature\n // The key is to explicitly type the slots so Vue's template compiler can infer them\n const TypedArrayField: FunctionalComponent<\n Omit<ArrayFieldProps<T, ItemType>, 'name'>,\n {},\n ArrayFieldSlots,\n {}\n > = (props, context) => {\n const fullProps = {\n ...metadataProps,\n ...props,\n name: fieldPath,\n } as ArrayFieldProps<T, ItemType>;\n\n // Ensure we pass slots through correctly\n const contextWithSlots = context || { attrs: {}, slots: {} as any };\n return baseArrayField(fullProps as any, contextWithSlots);\n };\n\n return TypedArrayField;\n}\n","/**\n * Functions for creating component props from field metadata\n */\n\nimport type { FieldMetadata } from '../types/fieldMetadataTypes';\n\n/**\n * Creates component props from field metadata\n *\n * @param metadata The field metadata to convert to props\n * @returns An object with props derived from the metadata\n */\nexport function createMetadataProps(metadata: FieldMetadata) {\n return {\n rows: metadata.rows,\n placeholder: metadata.placeholder,\n helpText: metadata.helpText,\n min: metadata.min,\n max: metadata.max,\n step: metadata.step,\n disabled: metadata.disabled,\n className: metadata.className,\n autofocus: metadata.autofocus,\n autocomplete: metadata.autocomplete,\n label: metadata.label,\n required: metadata.isRequired,\n };\n}\n","/**\n * Utilities for working with paths in the form system\n * These functions help with path manipulation and conversion\n */\n\nimport type { PathToPascalCase } from '../types';\nimport type { Path } from './paths';\n\n/**\n * Converts a dot-separated path to PascalCase component name\n * This uses recursion to handle any level of nesting\n * Also handles underscores by removing them and capitalizing each segment\n *\n * @param path The dot-separated path to convert\n * @returns The PascalCase component name with 'Field' suffix\n *\n * @example\n * pathToPascalCase('user.firstName') // returns 'UserFirstNameField'\n * pathToPascalCase('user.first_name') // returns 'UserFirstNameField'\n * pathToPascalCase('order.pizza_toppings') // returns 'OrderPizzaToppingsField'\n */\nexport function pathToPascalCase<T, P extends Path<T>>(path: P): PathToPascalCase<P & string> {\n const convertSegmentToPascalCase = (segment: string): string => {\n // Split by underscores and capitalize each part\n return segment\n .split('_')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n };\n\n const convertToPascalCase = (pathStr: string): string => {\n const dotIndex = pathStr.indexOf('.');\n if (dotIndex === -1) {\n // Base case: no more dots\n return convertSegmentToPascalCase(pathStr) + 'Field';\n } else {\n // Recursive case: capitalize first part and recurse on the rest\n const firstPart = pathStr.substring(0, dotIndex);\n const restPart = pathStr.substring(dotIndex + 1);\n return convertSegmentToPascalCase(firstPart) + convertToPascalCase(restPart);\n }\n };\n\n return convertToPascalCase(path) as PathToPascalCase<P & string>;\n}\n","/**\n * Functions for generating field components based on metadata\n */\n\nimport { z } from 'zod';\nimport { createMetadataProps } from '../metadata/createMetadataProps';\nimport { getDefaultStyle, getRegisteredStyle } from '../plugin';\nimport type { ComponentsType } from '../types/componentTypes';\nimport type { FieldMetadata } from '../types/fieldMetadataTypes';\nimport type { RegisteredStyleName } from '../types/registeredStyles';\nimport type { Path } from '../utils/paths';\nimport { pathToPascalCase } from '../utils/pathUtils';\nimport { createTypedArrayField } from './createTypedArrayField';\nimport { createTypedSelectField } from './createTypedSelectField';\n\n/**\n * Generate field components for a schema based on metadata\n *\n * @param schema The Zod schema for the form\n * @param fieldsMetadata Metadata for form fields\n * @param renderStyle The style to use for rendering\n * @returns Generated field components\n */\nexport function generateFieldComponents<T extends z.ZodObject<any>>(\n schema: T,\n fieldsMetadata: Record<string, FieldMetadata>,\n styleName?: RegisteredStyleName,\n) {\n type FormType = z.infer<typeof schema>;\n\n // Get the style creators from registered styles\n const styleToUse = styleName || getDefaultStyle();\n const styleCreators = getRegisteredStyle(styleToUse);\n\n if (!styleCreators) {\n throw new Error(\n `Render style \"${styleToUse}\" is not registered. Make sure to register it with the ZiniaPlugin.`,\n );\n }\n\n // Create the base field components\n const TextField = styleCreators.createTextField<FormType>();\n const NumberField = styleCreators.createNumberField<FormType>();\n const CurrencyField = styleCreators.createCurrencyField<FormType>();\n const CheckboxField = styleCreators.createCheckboxField<FormType>();\n const TextareaField = styleCreators.createTextareaField<FormType>();\n const RadioField = styleCreators.createRadioField<FormType>();\n const PasswordField = styleCreators.createPasswordField<FormType>();\n const EmailField = styleCreators.createEmailField<FormType>();\n const DateField = styleCreators.createDateField<FormType>();\n const TelField = styleCreators.createTelField<FormType>();\n const FileField = styleCreators.createFileField<FormType>();\n const RangeField = styleCreators.createRangeField<FormType>();\n const UrlField = styleCreators.createUrlField<FormType>();\n const SearchField = styleCreators.createSearchField<FormType>();\n const TimeField = styleCreators.createTimeField<FormType>();\n const DateTimeLocalField = styleCreators.createDateTimeLocalField<FormType>();\n const ArrayField = styleCreators.createArrayField<FormType>();\n const TransferListField = styleCreators.createTransferListField<FormType>();\n const ToppingsField = styleCreators.createToppingsField<FormType>();\n\n // Create a type-safe select field that knows about enum types\n const baseSelectField = styleCreators.createSelectField<FormType>();\n\n // Create collections for our field components with proper typing\n const fields: Record<string, any> = {};\n const components: Record<string, any> = {};\n const typedComponents = components as ComponentsType<FormType>;\n\n // Create a factory function that returns a properly typed SelectField based on the field path\n const typedSelectFieldFactory = <P extends Path<FormType>>(fieldPath: P) => {\n return createTypedSelectField(baseSelectField, fieldPath);\n };\n\n // Create a factory function that returns a properly typed ArrayField based on the field path\n const typedArrayFieldFactory = <P extends Path<FormType>>(fieldPath: P, metadata?: FieldMetadata) => {\n return createTypedArrayField(ArrayField, fieldPath, metadata);\n };\n\n // Create a dictionary to store typed select fields\n const typedSelectFields = {} as {\n [K in Path<FormType>]?: ReturnType<typeof typedSelectFieldFactory<K>>;\n };\n\n // Iterate through all fields in the schema\n Object.entries(fieldsMetadata).forEach(([path, metadata]) => {\n const fieldMeta = metadata as FieldMetadata;\n const typedPath = path as Path<FormType>;\n const componentName = pathToPascalCase<FormType, typeof typedPath>(typedPath);\n\n // First determine the component type based on inputType (if specified)\n // This allows the metadata to override the default component type\n // console.log('Creating field for', typedPath, 'with inputType', fieldMeta.inputType);\n if (fieldMeta.inputType) {\n switch (fieldMeta.inputType) {\n case 'textarea':\n // Create a textarea field\n const textareaFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return TextareaField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = textareaFieldComponent;\n components[componentName] = textareaFieldComponent;\n return; // Skip the type-based switch below\n\n case 'password':\n // Create a password field\n const passwordFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return PasswordField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = passwordFieldComponent;\n components[componentName] = passwordFieldComponent;\n return; // Skip the type-based switch below\n\n case 'email':\n // Create an email field\n const emailFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return EmailField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = emailFieldComponent;\n components[componentName] = emailFieldComponent;\n return; // Skip the type-based switch below\n\n case 'tel':\n // Create a telephone field\n const telFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return TelField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = telFieldComponent;\n components[componentName] = telFieldComponent;\n return; // Skip the type-based switch below\n\n case 'number':\n // Create a number field\n const numberInputFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return NumberField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = numberInputFieldComponent;\n components[componentName] = numberInputFieldComponent;\n return; // Skip the type-based switch below\n\n case 'checkbox':\n // Create a checkbox field\n const checkboxFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return CheckboxField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = checkboxFieldComponent;\n components[componentName] = checkboxFieldComponent;\n return; // Skip the type-based switch below\n\n case 'radio':\n // Create a radio field\n const radioFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return RadioField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = radioFieldComponent;\n components[componentName] = radioFieldComponent;\n return; // Skip the type-based switch below\n\n case 'select':\n // When inputType is explicitly set to 'select', always create a SelectField\n // Options can be provided via props later (selectOptions), so we don't require them here\n const selectFieldComponent = typedSelectFieldFactory(typedPath);\n fields[typedPath] = selectFieldComponent;\n components[componentName] = selectFieldComponent;\n typedSelectFields[typedPath] = selectFieldComponent;\n return; // Skip the type-based switch below\n\n case 'text':\n // Create a text field (default case)\n const textFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return TextField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = textFieldComponent;\n components[componentName] = textFieldComponent;\n return; // Skip the type-based switch below\n case 'currency':\n // Create a currency field\n const currencyFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return CurrencyField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = currencyFieldComponent;\n components[componentName] = currencyFieldComponent;\n return; // Skip the type-based switch below\n case 'date':\n // For date fields, create a date field\n const dateFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return DateField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = dateFieldComponent;\n components[componentName] = dateFieldComponent;\n return; // Skip the type-based switch below\n }\n }\n\n // If no inputType was specified or if the inputType didn't match a case above,\n // fall back to determining the component type based on the field type\n switch (fieldMeta.type) {\n case 'enum':\n if (fieldMeta.options && fieldMeta.options.length > 0) {\n // For enum fields, create a type-safe select field\n const fieldComponent = typedSelectFieldFactory(typedPath);\n // Use type assertion to specify this is an enum field component\n fields[typedPath] = fieldComponent;\n components[componentName] = fieldComponent;\n typedSelectFields[typedPath] = fieldComponent;\n }\n break;\n case 'string':\n // For string fields, create a text field\n const stringFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return TextField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = stringFieldComponent;\n components[componentName] = stringFieldComponent;\n break;\n case 'number':\n // For number fields, create a number field\n const numberFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return NumberField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = numberFieldComponent;\n components[componentName] = numberFieldComponent;\n break;\n case 'boolean':\n // For boolean fields, create a checkbox field\n const booleanFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return CheckboxField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = booleanFieldComponent;\n components[componentName] = booleanFieldComponent;\n break;\n case 'array':\n // For array fields, create a typed array field that preserves ItemType\n // Pass metadata so it's baked into the component\n const typedArrayField = typedArrayFieldFactory(typedPath, fieldMeta);\n fields[typedPath] = typedArrayField;\n components[componentName] = typedArrayField;\n break;\n case 'date':\n // For date fields, create a date field\n const dateFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n return DateField({ ...metadataProps, ...props, name: typedPath }, context || { attrs: {} });\n };\n fields[typedPath] = dateFieldComponent;\n components[componentName] = dateFieldComponent;\n break;\n // Add more field types as needed\n }\n });\n\n // Create a helper function to provide a cleaner syntax for accessing field components\n const field = <P extends Path<FormType>>(path: P) => {\n return fields[path];\n };\n\n const returnObj = {\n // Original field components\n TextField,\n NumberField,\n SelectField: baseSelectField,\n CheckboxField,\n TextareaField,\n RadioField,\n FileField,\n DateField,\n TimeField,\n DateTimeLocalField,\n RangeField,\n PasswordField,\n EmailField,\n UrlField,\n TelField,\n SearchField,\n ArrayField,\n TransferListField,\n ToppingsField,\n\n // Type-safe field creation utilities\n createTypedSelectField: typedSelectFieldFactory,\n typedSelectFields,\n\n // Dictionary of pre-generated field components\n fields: fields as Record<Path<FormType>, any>,\n\n // Helper function for cleaner syntax\n field,\n };\n\n //return\n\n return {\n generic: returnObj,\n typed: typedComponents,\n };\n}\n","/**\n * Functions for creating base display components\n */\n\nimport { z } from 'zod';\nimport { getDefaultStyle, getRegisteredStyle } from '../plugin';\nimport type { RegisteredStyleName } from '../types/registeredStyles';\n\n/**\n * Create base display components using registered styles\n *\n * @param schema The Zod schema for the data\n * @param styleName The style to use for rendering\n * @returns Base display components\n */\nexport function createBaseDisplayComponents<T extends z.ZodObject<any>>(\n schema: T,\n styleName?: RegisteredStyleName,\n) {\n type FormType = z.infer<typeof schema>;\n\n // Get the style creators from registered styles\n const styleToUse = styleName || getDefaultStyle();\n const styleCreators = getRegisteredStyle(styleToUse);\n\n if (!styleCreators) {\n throw new Error(`Render style \"${styleToUse}\" is not registered. Make sure to register it with the ZiniaPlugin.`);\n }\n\n // Create the base display components\n const ZiniaDisplay = styleCreators.createDisplay<FormType>();\n\n return {\n ZiniaDisplay,\n };\n}","/**\n * Functions for generating display field components based on metadata\n */\n\nimport { z } from 'zod';\nimport { createMetadataProps } from '../metadata/createMetadataProps';\nimport { getDefaultStyle, getRegisteredStyle } from '../plugin';\nimport type { PathToPascalCase } from '../types/componentTypes';\nimport type { FieldMetadata } from '../types/fieldMetadataTypes';\nimport type { RegisteredStyleName } from '../types/registeredStyles';\nimport type { Path } from '../utils/paths';\nimport { pathToPascalCase } from '../utils/pathUtils';\n\n/**\n * Type for display field components\n */\nexport type DisplayFieldComponent<T, P extends Path<T>, _FieldType extends string = 'string'> = (\n props: {\n name?: P;\n label?: string;\n hideLabel?: boolean;\n description?: string;\n format?: 'default' | 'currency' | 'date' | 'datetime' | 'boolean' | 'email' | 'url' | 'phone' | 'number';\n emptyText?: string;\n class?: string | string[];\n size?: string;\n variant?: string;\n copyable?: boolean;\n valueToLabel?: Record<string, string>;\n separator?: string;\n itemRenderer?: (item: any, index: number) => string;\n maxItems?: number;\n },\n context?: any,\n) => any;\n\n/**\n * Type for the display components object with PascalCase keys derived from field paths\n * This mirrors the ComponentsType from the form system but with Display suffix\n */\nexport type DisplayComponentsType<T> = {\n [K in Path<T> as `${PathToPascalCase<K & string>}` extends `${infer Base}Field`\n ? `${Base}Display`\n : `${PathToPascalCase<K & string>}Display`]: DisplayFieldComponent<T, K>;\n};\n\n/**\n * Generate display field components for a schema based on metadata\n *\n * @param schema The Zod schema for the data\n * @param fieldsMetadata Metadata for fields\n * @param renderStyle The style to use for rendering\n * @returns Generated display field components\n */\nexport function generateDisplayComponents<T extends z.ZodObject<any>>(\n schema: T,\n fieldsMetadata: Record<string, FieldMetadata>,\n styleName?: RegisteredStyleName,\n) {\n type FormType = z.infer<typeof schema>;\n\n // Get the style creators from registered styles\n const styleToUse = styleName || getDefaultStyle();\n const styleCreators = getRegisteredStyle(styleToUse);\n\n if (!styleCreators) {\n throw new Error(\n `Render style \"${styleToUse}\" is not registered. Make sure to register it with the ZiniaPlugin.`,\n );\n }\n\n // Create the base display field component\n const DisplayField = styleCreators.createDisplayField<FormType>();\n\n // Create collections for our display field components with proper typing\n const fields: Record<string, any> = {};\n const components: Record<string, any> = {};\n const typedComponents = components as DisplayComponentsType<FormType>;\n\n // Iterate through all fields in the schema\n Object.entries(fieldsMetadata).forEach(([path, metadata]) => {\n const fieldMeta = metadata as FieldMetadata;\n const typedPath = path as Path<FormType>;\n const componentName = pathToPascalCase<FormType, typeof typedPath>(typedPath).replace('Field', 'Display');\n\n // Create a display field component for each field\n const displayFieldComponent = (props: any, context?: any) => {\n const metadataProps = createMetadataProps(fieldMeta);\n\n // Determine default format based on field type and inputType\n let defaultFormat = props.format || 'default';\n if (!props.format) {\n if (fieldMeta.inputType === 'email') defaultFormat = 'email';\n else if (fieldMeta.inputType === 'url') defaultFormat = 'url';\n else if (fieldMeta.inputType === 'tel') defaultFormat = 'phone';\n else if (fieldMeta.inputType === 'date') defaultFormat = 'date';\n else if (fieldMeta.inputType === 'currency') defaultFormat = 'currency';\n else if (fieldMeta.inputType === 'number') defaultFormat = 'number';\n else if (fieldMeta.type === 'boolean') defaultFormat = 'boolean';\n else if (fieldMeta.type === 'date') defaultFormat = 'date';\n else if (fieldMeta.type === 'number') defaultFormat = 'number';\n }\n\n // Set up valueToLabel for enum fields\n let valueToLabel = props.valueToLabel;\n if (fieldMeta.type === 'enum' && fieldMeta.options && !valueToLabel) {\n valueToLabel = {};\n fieldMeta.options.forEach((option) => {\n if (typeof option === 'object' && option.value && option.label) {\n valueToLabel[option.value] = option.label;\n } else if (typeof option === 'string') {\n valueToLabel[option] = option;\n }\n });\n }\n\n return DisplayField(\n {\n ...metadataProps,\n ...props,\n name: props.name || typedPath,\n format: defaultFormat,\n valueToLabel,\n },\n context || { attrs: {} },\n );\n };\n\n fields[typedPath] = displayFieldComponent as DisplayFieldComponent<FormType, typeof typedPath, string>;\n components[componentName] = displayFieldComponent as DisplayFieldComponent<FormType, typeof typedPath, string>;\n });\n\n // Create a helper function to provide a cleaner syntax for accessing display field components\n const field = <P extends Path<FormType>>(path: P) => {\n return fields[path];\n };\n\n const returnObj = {\n // Original display field component\n DisplayField,\n\n // Dictionary of pre-generated display field components\n fields: fields as { [K in Path<FormType>]: DisplayFieldComponent<FormType, K, string> },\n\n // Helper function for cleaner syntax\n field,\n };\n\n return {\n generic: returnObj,\n typed: typedComponents,\n };\n}\n","/**\n * Utilities for working with object paths\n * These functions help with getting and setting values in objects using dot-notation paths\n */\n\n/**\n * Gets a value from an object by a dot-separated path\n * @param obj The object to get the value from\n * @param path The dot-separated path to the value\n * @returns The value at the path, or undefined if not found\n */\nexport function getValueByPath(obj: any, path: string): any {\n const segments = path.split('.');\n let current = obj;\n\n for (const segment of segments) {\n if (current === undefined || current === null) {\n return undefined;\n }\n current = current[segment];\n }\n\n return current;\n}\n\n/**\n * Sets a value in an object by a dot-separated path\n * Creates intermediate objects if they don't exist\n * @param obj The object to set the value in\n * @param path The dot-separated path to the value\n * @param value The value to set\n */\nexport function setValueByPath(obj: any, path: string, value: any): void {\n const segments = path.split('.');\n const lastSegment = segments.pop()!;\n let current = obj;\n\n for (const segment of segments) {\n if (current[segment] === undefined || current[segment] === null) {\n current[segment] = {};\n }\n current = current[segment];\n }\n\n current[lastSegment] = value;\n}\n","/**\n * Utilities for comparing values efficiently\n * These functions help determine if values have changed for dirty checking\n */\n\n/**\n * More efficient value comparison than JSON.stringify\n * Compares two values deeply and returns true if they are different\n *\n * @param a First value to compare\n * @param b Second value to compare\n * @returns true if values are different, false if they are the same\n */\nexport function compareValues(a: any, b: any): boolean {\n // Handle primitive types\n if (a === b) return false;\n\n // Handle arrays\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return true;\n return a.some((item, index) => compareValues(item, b[index]));\n }\n\n // Handle objects\n if (typeof a === 'object' && a !== null && typeof b === 'object' && b !== null) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return true;\n\n return keysA.some((key) => compareValues(a[key], b[key]));\n }\n\n // Different values\n return true;\n}\n","/**\n * Utilities for working with Zod schemas\n * These functions help with schema traversal, unwrapping, and caching\n */\n\nimport { z } from 'zod';\nimport { getValueByPath } from './objectPath';\n\n/**\n * Unwraps a schema from wrappers like optional, nullable, effects, etc.\n * @param schema The schema to unwrap\n * @returns The unwrapped schema or null if invalid\n */\nexport function unwrapSchema(schema: any): any {\n if (!schema) return null;\n\n // Keep unwrapping until we reach a base schema\n let unwrapped = schema;\n\n // Unwrap each type separately since they have different unwrap methods\n if (unwrapped instanceof z.ZodOptional) {\n unwrapped = unwrapped.unwrap();\n return unwrapSchema(unwrapped); // Recursively unwrap in case of nested wrappers\n }\n\n if (unwrapped instanceof z.ZodNullable) {\n unwrapped = unwrapped.unwrap();\n return unwrapSchema(unwrapped);\n }\n\n if (unwrapped instanceof z.ZodDefault) {\n unwrapped = unwrapped._def.innerType;\n return unwrapSchema(unwrapped);\n }\n\n // Handle effects (refinements)\n if (unwrapped instanceof z.ZodEffects) {\n return unwrapSchema(unwrapped._def.schema);\n }\n\n return unwrapped;\n}\n\n/**\n * Unwraps a schema for metadata extraction purposes only.\n * Preserves nullable and optional wrappers that are needed for validation.\n * @param schema The schema to unwrap\n * @returns The unwrapped schema with validation wrappers preserved\n */\nexport function unwrapSchemaForTraversal(schema: any): any {\n if (!schema) return null;\n\n let unwrapped = schema;\n\n // Only unwrap default and effects, preserve optional/nullable for validation\n if (unwrapped instanceof z.ZodDefault) {\n unwrapped = unwrapped._def.innerType;\n return unwrapSchemaForTraversal(unwrapped);\n }\n\n // Handle effects (refinements)\n if (unwrapped instanceof z.ZodEffects) {\n return unwrapSchemaForTraversal(unwrapped._def.schema);\n }\n\n return unwrapped;\n}\n\n/**\n * A class for caching and retrieving field schemas\n */\nexport class SchemaCache {\n private cache = new Map<string, z.ZodTypeAny>();\n\n /**\n * Gets a schema for a field path, using the cache if available\n * @param schema The root schema\n * @param path The field path\n * @param formData Optional form data for discriminated unions\n * @returns The field schema or null if not found\n */\n getFieldSchema(schema: z.ZodObject<any>, path: string, formData?: any): z.ZodTypeAny | null {\n // Check cache first\n if (this.cache.has(path)) {\n return this.cache.get(path)!;\n }\n\n const segments = path.split('.');\n let currentSchema: any = schema;\n\n // Process each path segment\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n\n // Unwrap only for traversal, preserving validation wrappers\n currentSchema = unwrapSchemaForTraversal(currentSchema);\n\n if (!currentSchema) return null;\n\n // Handle different schema types\n if (currentSchema instanceof z.ZodObject) {\n // Get the property from the object shape\n currentSchema = currentSchema.shape[segment];\n } else if (currentSchema instanceof z.ZodArray) {\n // If segment is a number, we're accessing an array index\n // Just return the element schema since we can't validate specific indices\n currentSchema = currentSchema.element;\n\n // If this was a numeric index and there are more segments,\n // we need to continue traversing with the next segment\n if (!isNaN(Number(segment)) && i < segments.length - 1) {\n continue;\n }\n } else if (currentSchema instanceof z.ZodDiscriminatedUnion) {\n // For discriminated unions, we need special handling\n const discriminator = currentSchema._def.discriminator;\n\n // If we're accessing the discriminator field itself\n if (segment === discriminator) {\n // Create a pseudo-enum schema for the discriminator\n const discriminatorValues = currentSchema._def.options\n .map((option: any) => {\n const discriminatorSchema = option.shape[discriminator];\n if (discriminatorSchema instanceof z.ZodLiteral) {\n return discriminatorSchema._def.value;\n }\n return null;\n })\n .filter(Boolean);\n\n // Return a string enum schema\n currentSchema = z.enum(discriminatorValues as [string, ...string[]]);\n break;\n }\n\n // If we're accessing a field other than the discriminator and we have form data\n // We need to find which variant to use based on the current discriminator value\n if (formData) {\n const parentPath = segments.slice(0, i).join('.');\n const discriminatorPath = parentPath ? `${parentPath}.${discriminator}` : discriminator;\n const discriminatorValue = getValueByPath(formData, discriminatorPath);\n\n // Find the matching option based on the discriminator value\n const matchingOption = currentSchema._def.options.find((option: any) => {\n const optionDiscriminatorSchema = option.shape[discriminator];\n if (optionDiscriminatorSchema instanceof z.ZodLiteral) {\n return optionDiscriminatorSchema._def.value === discriminatorValue;\n }\n return false;\n });\n\n if (matchingOption) {\n // Get the schema for the requested field from the matching option\n currentSchema = matchingOption.shape[segment];\n } else {\n // If no matching option, use the first option as a fallback\n currentSchema = currentSchema._def.options[0].shape[segment];\n }\n } else {\n // Without form data, use the first option as a fallback\n currentSchema = currentSchema._def.options[0].shape[segment];\n }\n } else if (currentSchema instanceof z.ZodUnion) {\n // For unions, try to find a schema that validates the current value\n const unionSchemas = currentSchema._def.options;\n let foundSchema = null;\n\n // If we have form data, try to find a matching schema\n if (formData) {\n // Get the current path up to this point to extract the value\n const currentPath = segments.slice(0, i + 1).join('.');\n const currentValue = getValueByPath(formData, currentPath);\n\n // Try each schema in the union\n for (const unionSchema of unionSchemas) {\n const result = unionSchema.safeParse(currentValue);\n if (result.success) {\n foundSchema = unionSchema;\n break;\n }\n }\n }\n\n // If we couldn't find a matching schema or don't have form data, use the first one\n currentSchema = foundSchema || unionSchemas[0];\n } else if (currentSchema instanceof z.ZodRecord) {\n // Handle record types (key-value objects)\n currentSchema = currentSchema._def.valueType;\n } else if (typeof currentSchema !== 'object' || currentSchema === null) {\n // We've reached a primitive schema with no more nesting\n if (i === segments.length - 1) {\n // If this is the last segment, return the primitive schema\n break;\n }\n return null;\n }\n }\n\n // Don't fully unwrap the final result - preserve optional/nullable for validation\n // Only unwrap defaults and effects\n currentSchema = unwrapSchemaForTraversal(currentSchema);\n\n // Cache the result\n if (currentSchema) {\n this.cache.set(path, currentSchema);\n }\n\n return currentSchema;\n }\n\n /**\n * Clears the schema cache\n */\n clear(): void {\n this.cache.clear();\n }\n}\n","/**\n * Functions for validating individual form fields\n */\n\nimport { z } from 'zod';\nimport { getValueByPath } from '../utils/objectPath';\nimport { SchemaCache } from '../utils/schemaUtils';\n\n/**\n * Validate a specific field against its schema\n *\n * @param schema The root Zod schema\n * @param formData The form data object\n * @param path The path to the field to validate\n * @param schemaCache Optional schema cache for performance\n * @returns Validation result with success flag and error message\n */\nexport function validateField(\n schema: z.ZodObject<any>,\n formData: any,\n path: string,\n schemaCache?: SchemaCache,\n): {\n success: boolean;\n error?: string;\n} {\n // Use provided schema cache or create a new one\n const cache = schemaCache || new SchemaCache();\n\n // Get the field schema\n const fieldSchema = cache.getFieldSchema(schema, path, formData);\n if (!fieldSchema) {\n return {\n success: false,\n error: 'Invalid field path',\n };\n }\n\n // Get the value and validate\n const value = getValueByPath(formData, path);\n const result = fieldSchema.safeParse(value);\n\n if (result.success) {\n return {\n success: true,\n };\n } else {\n return {\n success: false,\n error: result.error.errors[0]?.message || 'Invalid value',\n };\n }\n}\n\n/**\n * Check if a field has a validation error\n *\n * @param errors Record of field errors\n * @param path Field path to check\n * @returns True if the field has an error\n */\nexport function hasFieldError(errors: Record<string, string>, path: string): boolean {\n return !!errors[path];\n}\n\n/**\n * Get the error message for a field\n *\n * @param errors Record of field errors\n * @param path Field path to check\n * @returns Error message or empty string if no error\n */\nexport function getFieldError(errors: Record<string, string>, path: string): string {\n return errors[path] || '';\n}\n","/**\n * Operations for managing form field state\n */\n\nimport { z } from 'zod';\nimport type { FormState } from '../hooks/useFormState';\nimport { getValueByPath, setValueByPath } from '../utils/objectPath';\nimport { SchemaCache } from '../utils/schemaUtils';\nimport { compareValues } from '../utils/valueComparison';\nimport { validateField } from '../validation/fieldValidation';\n\n/**\n * Mark a field as touched\n *\n * @param formState The form state\n * @param path The field path\n */\nexport function touchField<T>(formState: FormState<T>, path: string): void {\n formState.touched[path] = true;\n}\n\n/**\n * Check if a field is touched\n *\n * @param formState The form state\n * @param path The field path\n * @returns True if the field is touched\n */\nexport function isTouched<T>(formState: FormState<T>, path: string): boolean {\n return !!formState.touched[path];\n}\n\n/**\n * Mark a field as dirty\n *\n * @param formState The form state\n * @param path The field path\n */\nexport function markFieldAsDirty<T>(formState: FormState<T>, path: string): void {\n formState.dirty[path] = true;\n}\n\n/**\n * Check if a field is dirty\n *\n * @param formState The form state\n * @param path The field path\n * @returns True if the field is dirty\n */\nexport function isDirtyField<T>(formState: FormState<T>, path: string): boolean {\n return !!formState.dirty[path];\n}\n\n/**\n * Reset a field to its initial value\n *\n * @param formState The form state\n * @param initialFormData The initial form data\n * @param path The field path\n * @param schema The form schema\n * @param schemaCache Optional schema cache\n */\nexport function resetField<T>(\n formState: FormState<T>,\n initialFormData: T,\n path: string,\n schema?: z.ZodObject<any>,\n schemaCache?: SchemaCache,\n): void {\n // Get the initial value\n const initialValue = getValueByPath(initialFormData, path);\n\n // Set the value back to initial\n setValueByPath(formState.data, path, initialValue);\n\n // Remove dirty flag\n delete formState.dirty[path];\n\n // Validate the field if schema is provided\n if (schema) {\n const result = validateField(schema, formState.data, path, schemaCache);\n if (result.success) {\n delete formState.errors[path];\n } else if (result.error) {\n formState.errors[path] = result.error;\n }\n }\n}\n\n/**\n * Set a field value and update dirty state\n *\n * @param formState The form state\n * @param initialFormData The initial form data\n * @param path The field path\n * @param value The new value\n * @param schema Optional schema for validation\n * @param schemaCache Optional schema cache\n */\nexport function setFieldValue<T>(\n formState: FormState<T>,\n initialFormData: T,\n path: string,\n value: any,\n schema?: z.ZodObject<any>,\n schemaCache?: SchemaCache,\n): void {\n // Get initial value to compare\n const initialValue = getValueByPath(initialFormData, path);\n\n // Set the new value\n setValueByPath(formState.data, path, value);\n\n // Check if dirty - use efficient comparison\n const isDifferent = compareValues(value, initialValue);\n\n if (isDifferent) {\n formState.dirty[path] = true;\n } else {\n delete formState.dirty[path];\n }\n\n // Validate the field if schema is provided\n if (schema) {\n const result = validateField(schema, formState.data, path, schemaCache);\n if (result.success) {\n delete formState.errors[path];\n } else if (result.error) {\n formState.errors[path] = result.error;\n }\n }\n}\n\n/**\n * Get a field value\n *\n * @param formState The form state\n * @param path The field path\n * @returns The field value\n */\nexport function getFieldValue<T>(formState: FormState<T>, path: string): any {\n return getValueByPath(formState.data, path);\n}\n\n/**\n * Check if a field has an error\n *\n * @param formState The form state\n * @param path The field path\n * @returns True if the field has an error\n */\nexport function hasFieldError<T>(formState: FormState<T>, path: string): boolean {\n return !!formState.errors[path];\n}\n\n/**\n * Get the error message for a field\n *\n * @param formState The form state\n * @param path The field path\n * @returns The error message or empty string\n */\nexport function getFieldError<T>(formState: FormState<T>, path: string): string {\n return formState.errors[path] || '';\n}\n","/**\n * Registry for storing schema metadata\n */\n\nimport type { MetadataRegistry, SchemaFieldMetadata } from '../types/schemaMetadataTypes';\n\n/**\n * Global registry to store metadata for schemas\n * This registry maps schema IDs to their field metadata\n */\nconst globalRegistry: Record<string, MetadataRegistry> = {};\n\n/**\n * Get metadata for a specific field in a schema\n *\n * @param schemaId Unique identifier for the schema\n * @param path Path to the field\n * @returns Metadata for the field or undefined if not found\n */\nexport function getFieldMetadata(schemaId: string, path: string): SchemaFieldMetadata | undefined {\n const registry = globalRegistry[schemaId];\n if (!registry) return undefined;\n\n return registry[path];\n}\n\n/**\n * Get all metadata for a schema\n *\n * @param schemaId Unique identifier for the schema\n * @returns All metadata for the schema or an empty object if not found\n */\nexport function getAllSchemaMetadata(schemaId: string): MetadataRegistry {\n return globalRegistry[schemaId] || {};\n}\n\n/**\n * Set metadata for a schema\n *\n * @param schemaId Unique identifier for the schema\n * @param metadata Object mapping field paths to their metadata\n */\nexport function setSchemaMetadata(schemaId: string, metadata: MetadataRegistry): void {\n globalRegistry[schemaId] = metadata;\n}\n\n/**\n * Check if a schema has metadata\n *\n * @param schemaId Unique identifier for the schema\n * @returns True if the schema has metadata, false otherwise\n */\nexport function hasSchemaMetadata(schemaId: string): boolean {\n return schemaId in globalRegistry;\n}\n\n/**\n * Clear metadata for a schema\n *\n * @param schemaId Unique identifier for the schema\n */\nexport function clearSchemaMetadata(schemaId: string): void {\n delete globalRegistry[schemaId];\n}\n\n/**\n * Clear all metadata from the registry\n */\nexport function clearAllMetadata(): void {\n Object.keys(globalRegistry).forEach((key) => {\n delete globalRegistry[key];\n });\n}\n","/**\n * Functions for registering schema metadata\n */\n\nimport { z } from 'zod';\nimport type { MetadataRegistry, PathsOf, SchemaFieldMetadata } from '../types/schemaMetadataTypes';\nimport { setSchemaMetadata } from './metadataRegistry';\n\n/**\n * Register metadata for a schema\n *\n * @param schemaId Unique identifier for the schema\n * @param metadata Object mapping field paths to their metadata\n */\nexport function registerSchemaMetadata(schemaId: string, metadata: MetadataRegistry): void;\n\n/**\n * Register metadata for a schema with type checking for field paths\n *\n * @param schema The Zod schema\n * @param schemaId Unique identifier for the schema\n * @param metadata Object mapping field paths to their metadata\n */\nexport function registerSchemaMetadata<T extends z.ZodObject<any>>(\n schema: T,\n schemaId: string,\n metadata: { [K in PathsOf<T>]?: SchemaFieldMetadata },\n): void;\n\n/**\n * Implementation that handles both overloads\n */\nexport function registerSchemaMetadata<T extends z.ZodObject<any>>(\n schemaOrId: T | string,\n metadataOrId: string | MetadataRegistry,\n metadataOrNothing?: { [K in PathsOf<T>]?: SchemaFieldMetadata },\n): void {\n // Handle the different overloads\n if (typeof schemaOrId === 'string') {\n // First overload: (schemaId, metadata)\n const schemaId = schemaOrId;\n const metadata = metadataOrId as MetadataRegistry;\n setSchemaMetadata(schemaId, metadata);\n } else {\n // Second overload: (schema, schemaId, metadata)\n const schemaId = metadataOrId as string;\n const metadata = metadataOrNothing as MetadataRegistry;\n setSchemaMetadata(schemaId, metadata);\n }\n}\n","/**\n * Functions for attaching metadata to schemas\n */\n\nimport { z } from 'zod';\nimport type { PathsOf, SchemaFieldMetadata } from '../types/schemaMetadataTypes';\nimport { registerSchemaMetadata } from './registerMetadata';\n\n// Symbol to store the schema ID on the schema object\nexport const SCHEMA_ID_SYMBOL = Symbol('schemaId');\n\n/**\n * Helper function to get the schema ID from a schema object\n *\n * @param schema Zod schema that might have a schema ID attached\n * @returns The schema ID or undefined if not found\n */\nexport function getSchemaId(schema: z.ZodTypeAny): string | undefined {\n // @ts-ignore - we're accessing a symbol property that TypeScript doesn't know about\n return schema[SCHEMA_ID_SYMBOL];\n}\n\n/**\n * Helper function to create a schema with associated metadata\n *\n * @param schema Zod schema\n * @param schemaId Unique identifier for the schema\n * @param metadata Metadata for the schema fields\n * @returns The original schema with the schema ID attached\n */\nexport function withMetadata<T extends z.ZodObject<any>>(\n schema: T,\n schemaId: string,\n metadata: { [K in PathsOf<T>]?: SchemaFieldMetadata },\n): T {\n // Register the metadata in the global registry\n registerSchemaMetadata(schema, schemaId, metadata);\n\n // Attach the schema ID to the schema object using a symbol\n // This allows us to retrieve the schema ID later without modifying the schema's behavior\n // @ts-ignore - we're adding a symbol property that TypeScript doesn't know about\n schema[SCHEMA_ID_SYMBOL] = schemaId;\n\n return schema;\n}\n","/**\n * Utilities for generating human-readable labels from field paths\n */\n\n/**\n * Generates a human-readable label from a field path\n * Converts camelCase, snake_case, or UPPER_SNAKE_CASE to Title Case with spaces\n *\n * @param path The field path (e.g., \"user.firstName\", \"order_details\", or \"USER_PROFILE\")\n * @returns A formatted label (e.g., \"First Name\", \"Order Details\", or \"User Profile\")\n */\nexport function generateLabelFromPath(path: string): string {\n if (!path) return '';\n\n // Get the last segment of the path (e.g., \"firstName\" from \"user.firstName\")\n const lastSegment = path.split('.').pop() || '';\n\n // Convert camelCase, snake_case, or UPPER_SNAKE_CASE to Title Case with spaces\n return (\n lastSegment\n // Convert to lowercase if it's all uppercase (UPPER_SNAKE_CASE)\n .replace(/^[A-Z0-9_]+$/, match => match.toLowerCase())\n // Insert a space before all uppercase letters and capitalize the first letter of each word\n .replace(/([A-Z])/g, ' $1')\n // Replace underscores with spaces\n .replace(/_/g, ' ')\n // Trim leading spaces that might occur and capitalize the first letter\n .trim()\n .replace(/^\\w/, (c) => c.toUpperCase())\n // Capitalize each word after a space\n .replace(/\\s\\w/g, (match) => match.toUpperCase())\n );\n}\n","/**\n * Functions for extracting metadata from Zod schemas\n */\n\nimport { z } from 'zod';\nimport { getFieldMetadata } from '../registry';\nimport type { FieldMetadata } from '../types/fieldMetadataTypes';\nimport { generateLabelFromPath } from '../utils/labelGeneration';\n\n/**\n * Extract field metadata from a Zod schema\n *\n * @param schema The Zod schema to extract metadata from\n * @param path The field path (e.g., 'user.firstName')\n * @param parentSchema Optional parent schema for context\n * @param schemaId Optional schema ID for registry lookups\n * @returns Metadata for the field\n */\nexport function extractFieldMetadata(\n schema: z.ZodTypeAny,\n path: string = '',\n parentSchema?: z.ZodTypeAny,\n schemaId?: string,\n): FieldMetadata {\n // Default metadata\n const metadata: FieldMetadata = {\n path,\n isRequired: true,\n type: 'string',\n inputType: 'text',\n };\n\n // Generate a label from the path if available\n if (path) {\n metadata.label = generateLabelFromPath(path);\n }\n\n // Recursively unwrap nested wrapper schemas\n let unwrappedSchema = schema;\n while (true) {\n if (unwrappedSchema instanceof z.ZodDefault) {\n // Store the default value if we haven't found one yet (use the outermost default)\n if (metadata.defaultValue === undefined) {\n metadata.defaultValue = unwrappedSchema._def.defaultValue();\n }\n // Unwrap the inner schema\n unwrappedSchema = unwrappedSchema._def.innerType;\n } else if (unwrappedSchema instanceof z.ZodOptional) {\n metadata.isRequired = false;\n unwrappedSchema = unwrappedSchema._def.innerType;\n } else if (unwrappedSchema instanceof z.ZodNullable) {\n metadata.isRequired = false;\n unwrappedSchema = unwrappedSchema._def.innerType;\n } else {\n // No more wrapper schemas to unwrap\n break;\n }\n }\n \n // Use the fully unwrapped schema for the rest of the processing\n schema = unwrappedSchema;\n\n // Determine field type and input type\n if (schema instanceof z.ZodString) {\n metadata.type = 'string';\n metadata.inputType = 'text';\n\n // Check for specific string validations\n for (const check of schema._def.checks || []) {\n if (check.kind === 'email') {\n metadata.inputType = 'email';\n } else if (check.kind === 'regex') {\n metadata.pattern = check.regex;\n\n // Check if it's a phone number pattern\n if (check.regex.toString().includes('\\\\d') && check.regex.toString().includes('{10}')) {\n metadata.inputType = 'tel';\n }\n } else if (check.kind === 'min') {\n metadata.min = check.value;\n } else if (check.kind === 'max') {\n metadata.max = check.value;\n }\n }\n } else if (schema instanceof z.ZodNumber) {\n metadata.type = 'number';\n metadata.inputType = 'number';\n\n // Check for numeric validations\n for (const check of schema._def.checks || []) {\n if (check.kind === 'min') {\n metadata.min = check.value;\n } else if (check.kind === 'max') {\n metadata.max = check.value;\n }\n }\n } else if (schema instanceof z.ZodBoolean) {\n metadata.type = 'boolean';\n metadata.inputType = 'checkbox';\n\n // For boolean fields, we should only mark them as required if they MUST be true\n // By default, we'll set isRequired to false for checkboxes since they always have a value (true/false)\n metadata.isRequired = false;\n\n // We'll rely on the metadata registry to override this if needed\n // This is the most reliable approach as it makes requirements explicit\n } else if (schema instanceof z.ZodEnum) {\n metadata.type = 'enum';\n metadata.inputType = 'select';\n metadata.options = schema._def.values.map((value: string) => {\n // Simple generic formatting: capitalize first letter and replace hyphens with spaces\n const label = value\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n return {\n value,\n label,\n };\n });\n } else if (schema instanceof z.ZodArray) {\n metadata.type = 'array';\n metadata.inputType = 'array';\n metadata.isArray = true;\n\n // Get information about array elements\n if (schema._def.minLength) {\n metadata.min = schema._def.minLength.value;\n }\n if (schema._def.maxLength) {\n metadata.max = schema._def.maxLength.value;\n }\n\n // Extract metadata for array elements\n const elementMetadata = extractFieldMetadata(schema._def.type, '', schema, schemaId);\n metadata.arrayOf = elementMetadata;\n\n // Check if array elements are based on an enum\n if (elementMetadata.type === 'object') {\n // Look for enum fields in the object that could be used for available items\n const enumFields = Object.entries(elementMetadata.children || {}).filter(\n ([_, fieldMeta]) => fieldMeta.type === 'enum' && fieldMeta.options,\n );\n\n if (enumFields.length > 0) {\n // Use the first enum field to generate available items\n const [fieldName, enumMeta] = enumFields[0];\n if (enumMeta.options) {\n // Generate available items based on the enum values\n metadata.availableItems = enumMeta.options.map((option) => {\n // Create a basic item with the enum value\n const item: any = { [fieldName]: option.value };\n return item;\n });\n }\n }\n }\n } else if (schema instanceof z.ZodObject) {\n metadata.type = 'object';\n metadata.children = {};\n\n // Process each property of the object\n for (const [key, fieldSchema] of Object.entries(schema.shape)) {\n const fieldPath = path ? `${path}.${key}` : key;\n metadata.children[key] = extractFieldMetadata(fieldSchema as z.ZodTypeAny, fieldPath, schema, schemaId);\n }\n } else if (schema instanceof z.ZodEffects) {\n // Handle ZodEffects (e.g., refinements, transformations)\n const innerSchema = schema._def.schema;\n if (innerSchema) {\n // Get the metadata from the inner schema\n const innerMetadata = extractFieldMetadata(innerSchema, path, parentSchema, schemaId);\n\n // Try to extract dependencies from the refinement function\n if (schema._def.effect.type === 'refinement') {\n // We can't directly extract the dependencies from the function code\n // But we can add a note that this field has refinements\n innerMetadata.helpText =\n (innerMetadata.helpText || '') + '\\nThis field has custom validation rules that may depend on other fields.';\n }\n\n // Return the inner metadata directly, like in v1\n return innerMetadata;\n }\n } else if (schema instanceof z.ZodUnion) {\n metadata.type = 'union';\n\n // Extract metadata for each union option\n const unionVariants: FieldMetadata[] = [];\n for (const option of schema._def.options) {\n const variantMetadata = extractFieldMetadata(option, path, schema, schemaId);\n unionVariants.push(variantMetadata);\n }\n\n // By default, use the first variant's properties\n if (unionVariants.length > 0) {\n metadata.inputType = unionVariants[0].inputType;\n metadata.type = unionVariants[0].type;\n metadata.children = unionVariants[0].children;\n }\n } else if (schema instanceof z.ZodDiscriminatedUnion) {\n // Handle discriminated unions (like payment methods with different requirements)\n metadata.type = 'object';\n metadata.children = {};\n\n // Get the discriminator field\n const discriminator = schema._def.discriminator;\n\n // Create a special metadata entry for the discriminator field\n const discriminatorPath = path ? `${path}.${discriminator}` : discriminator;\n\n // Extract possible values for the discriminator from the options\n const discriminatorValues = schema._def.options\n .map((option: z.ZodObject<any>) => {\n // Each option should have a literal for the discriminator\n const discriminatorSchema = option.shape[discriminator];\n if (discriminatorSchema instanceof z.ZodLiteral) {\n return discriminatorSchema._def.value;\n }\n return null;\n })\n .filter(Boolean);\n\n // Create enum-like metadata for the discriminator field\n metadata.children[discriminator] = {\n path: discriminatorPath,\n isRequired: true,\n type: 'enum',\n inputType: 'select',\n options: discriminatorValues.map((value: any) => ({\n value: value as string,\n label: value as string,\n })),\n };\n\n // For each option in the discriminated union\n for (const option of schema._def.options) {\n // Get the discriminator value for this option\n const discriminatorSchema = option.shape[discriminator];\n let discriminatorValue: any = null;\n\n if (discriminatorSchema instanceof z.ZodLiteral) {\n discriminatorValue = discriminatorSchema._def.value;\n }\n\n if (discriminatorValue) {\n // For each field in this option (except the discriminator)\n for (const [key, fieldSchema] of Object.entries(option.shape)) {\n if (key !== discriminator) {\n const fieldPath = path ? `${path}.${key}` : key;\n\n // Get metadata for this field\n const fieldMetadata = extractFieldMetadata(fieldSchema as z.ZodTypeAny, fieldPath, option, schemaId);\n\n // If this field doesn't exist in the metadata children yet, add it\n if (!metadata.children[key]) {\n metadata.children[key] = fieldMetadata;\n }\n }\n }\n }\n }\n } else if (schema instanceof z.ZodDate) {\n metadata.type = 'date';\n metadata.inputType = 'text'; // HTML5 date input\n }\n\n // Extract custom error messages if available\n if ('errorMap' in schema._def && typeof schema._def.errorMap === 'function') {\n // This is a simplification - getting actual error messages is complex\n // as they're often generated dynamically based on the context\n }\n\n // Apply custom metadata from registry if available - this happens at the end\n // so that registry overrides take precedence over automatically extracted metadata\n if (schemaId && path) {\n const customMetadata = getFieldMetadata(schemaId, path);\n if (customMetadata) {\n // Apply special case handling first\n\n // If rows is specified and > 1, automatically set inputType to textarea\n if (customMetadata.rows && customMetadata.rows > 1) {\n metadata.inputType = 'textarea';\n }\n\n // Handle valueToLabel for enum fields\n if (customMetadata.valueToLabel && metadata.type === 'enum' && metadata.options) {\n // Update the options with the custom labels\n metadata.options = metadata.options.map((option) => ({\n value: option.value,\n label: customMetadata.valueToLabel?.[option.value] || option.label,\n }));\n }\n\n // Handle case where inputType is set to 'select' in the metadata registry\n if (customMetadata.inputType === 'select') {\n // Always set type to enum for select inputs to ensure proper component selection\n metadata.type = 'enum';\n \n // If options are not provided or empty, try to generate them from available sources\n if (!metadata.options || metadata.options.length === 0) {\n // If valueToLabel is provided, use it to generate options\n if (customMetadata.valueToLabel) {\n metadata.options = Object.entries(customMetadata.valueToLabel).map(([value, label]) => ({\n value,\n label: label as string,\n }));\n } else if (customMetadata.options) {\n // If options are directly provided in the custom metadata, use those\n metadata.options = customMetadata.options;\n } else {\n // If no options are provided, create a placeholder option to ensure the select component renders\n // The component can replace these with dynamic options at runtime\n metadata.options = [\n { value: '', label: 'Select an option' }\n ];\n }\n }\n }\n\n // Now apply all other metadata properties as overrides\n Object.entries(customMetadata).forEach(([key, value]) => {\n // Skip valueToLabel as we've already handled it specially\n if (key === 'valueToLabel') return;\n\n // Skip rows/cols if we've already set inputType to textarea\n if ((key === 'rows' || key === 'cols') && metadata.inputType === 'textarea') {\n // Still set the property for use by the UI component\n // @ts-ignore - we're dynamically setting properties\n metadata[key] = value;\n return;\n }\n\n // Set all other properties - apply ALL custom metadata properties\n // regardless of whether they already exist in the metadata object\n // @ts-ignore - we're dynamically setting properties\n metadata[key] = value;\n });\n }\n }\n\n return metadata;\n}\n","/**\n * Functions for extracting metadata from all fields in a Zod schema\n */\n\nimport { z } from 'zod';\nimport { getSchemaId } from '../registry';\nimport type { FieldMetadata } from '../types/fieldMetadataTypes';\nimport { extractFieldMetadata } from './extractFieldMetadata';\n\n/**\n * Extract a flat map of all field metadata from a Zod schema\n *\n * @param schema The Zod schema to extract metadata from\n * @param schemaId Optional explicit schema ID for registry lookups\n * @param storeName Optional store name to use as fallback if no schema ID is found\n * @returns A record mapping field paths to their metadata\n */\nexport function extractAllFieldsMetadata(\n schema: z.ZodTypeAny,\n schemaId?: string,\n storeName?: string,\n): Record<string, FieldMetadata> {\n // Schema ID resolution priority:\n // 1. Explicit schemaId parameter\n // 2. Schema ID attached to the schema object\n // 3. Store name as fallback\n if (!schemaId) {\n schemaId = getSchemaId(schema) || storeName;\n }\n\n const result: Record<string, FieldMetadata> = {};\n\n // Helper function to process all metadata and their children\n function processMetadata(metadata: FieldMetadata) {\n if (metadata.path) {\n result[metadata.path] = metadata;\n }\n\n // Process all children regardless of type\n if (metadata.children) {\n for (const childMetadata of Object.values(metadata.children)) {\n processMetadata(childMetadata);\n }\n }\n }\n\n // Start the processing\n const rootMetadata = extractFieldMetadata(schema, '', undefined, schemaId);\n processMetadata(rootMetadata);\n\n return result;\n}\n","/**\n * Form metadata hook\n * Provides metadata extraction and management for forms\n */\n\nimport { z } from 'zod';\nimport { extractAllFieldsMetadata } from '../metadata/extractAllMetadata';\nimport { getSchemaId } from '../registry';\nimport type { FieldMetadata } from '../types/fieldMetadataTypes';\n\n/**\n * Result of the useFormMetadata hook\n */\nexport interface FormMetadataResult {\n // The resolved schema ID\n schemaId: string;\n\n // Field metadata\n fieldsMetadata: Record<string, FieldMetadata>;\n}\n\n/**\n * Extract and manage form metadata\n *\n * @param schema The Zod schema for the form\n * @param options Options for metadata extraction\n * @returns Metadata and schema ID\n */\nexport function useFormMetadata<T extends z.ZodTypeAny>(\n schema: T,\n options: {\n schemaId?: string;\n storeName: string;\n },\n): FormMetadataResult {\n // Schema ID resolution with clear priority:\n // 1. Explicit schemaId in options\n // 2. Schema ID attached to the schema\n // 3. Store name as fallback\n const schemaId = options.schemaId || getSchemaId(schema) || options.storeName;\n\n // Extract field metadata\n const fieldsMetadata = extractAllFieldsMetadata(schema, schemaId, options.storeName);\n\n return {\n schemaId,\n fieldsMetadata,\n };\n}\n","/**\n * Simple logger utility with configurable debug levels\n */\nexport class Logger {\n private static instances = new Map<string, Logger>();\n private static globalDebugEnabled = false;\n\n private debugEnabled: boolean;\n private context: string;\n\n /**\n * Enable or disable debug logging globally\n */\n static setGlobalDebug(enabled: boolean): void {\n Logger.globalDebugEnabled = enabled;\n console.log(`[Logger] Global debug ${enabled ? 'enabled' : 'disabled'}`);\n }\n\n /**\n * Get the current global debug state\n */\n static isGlobalDebugEnabled(): boolean {\n return Logger.globalDebugEnabled;\n }\n\n /**\n * Get a logger instance for a specific context\n */\n static getLogger(context: string, debugEnabled = false): Logger {\n if (!this.instances.has(context)) {\n this.instances.set(context, new Logger(context, debugEnabled));\n }\n return this.instances.get(context)!;\n }\n\n private constructor(context: string, debugEnabled: boolean) {\n this.context = context;\n this.debugEnabled = debugEnabled;\n }\n\n /**\n * Enable or disable debug logging for this logger instance\n */\n setDebug(enabled: boolean): void {\n this.debugEnabled = enabled;\n this.debug(`Debug logging ${enabled ? 'enabled' : 'disabled'}`);\n }\n\n /**\n * Check if debug logging is enabled for this instance\n */\n isDebugEnabled(): boolean {\n return this.debugEnabled || Logger.globalDebugEnabled;\n }\n\n /**\n * Log a debug message (only if debug is enabled)\n */\n debug(message: string, ...args: any[]): void {\n if (this.isDebugEnabled()) {\n console.debug(`[${this.context}] ${message}`, ...args);\n }\n }\n\n /**\n * Log an info message\n */\n info(message: string, ...args: any[]): void {\n console.info(`[${this.context}] ${message}`, ...args);\n }\n\n /**\n * Log a warning message\n */\n warn(message: string, ...args: any[]): void {\n console.warn(`[${this.context}] ${message}`, ...args);\n }\n\n /**\n * Log an error message\n */\n error(message: string, ...args: any[]): void {\n console.error(`[${this.context}] ${message}`, ...args);\n }\n\n /**\n * Log a performance measurement\n */\n perf(label: string, startTime: number): void {\n if (this.isDebugEnabled()) {\n const duration = performance.now() - startTime;\n console.debug(`[${this.context}] ${label}: ${duration.toFixed(2)}ms`);\n }\n }\n}\n","import { nextTick } from 'vue';\nimport { Logger } from './Logger';\n\n/**\n * Generic queue manager that processes items in the next tick\n * Useful for batching updates and optimizing performance\n */\nexport class NextTickQueueManager<T = any> {\n private static instances = new Map<string, NextTickQueueManager<any>>();\n private static logger = Logger.getLogger('NextTickQueueManager');\n\n private pendingItem: T | null = null;\n private processingPromise: Promise<void> | null = null;\n private processor: (item: T) => void;\n private id: string;\n private logger: Logger;\n private queueCount = 0;\n private processCount = 0;\n private lastQueueTime = 0;\n\n /**\n * Enable or disable debug logging for all NextTickQueueManager instances\n */\n static setDebug(enabled: boolean): void {\n this.logger.setDebug(enabled);\n this.logger.debug(`Debug ${enabled ? 'enabled' : 'disabled'} for all instances`);\n\n // Update all existing instances\n this.instances.forEach((instance) => {\n instance.logger.setDebug(enabled);\n });\n }\n\n /**\n * Get or create a singleton instance with the given ID\n * @param id Unique identifier for this queue manager\n * @param processor Function to process the queued item\n * @param debug Enable debug logging for this instance\n * @returns NextTickQueueManager instance\n */\n static getInstance<U>(id: string, processor: (item: U) => void, debug = false): NextTickQueueManager<U> {\n if (!this.instances.has(id)) {\n this.logger.debug(`Creating new instance with ID: ${id}`);\n this.instances.set(id, new NextTickQueueManager<U>(id, processor, debug));\n } else {\n this.logger.debug(`Returning existing instance with ID: ${id}`);\n }\n return this.instances.get(id) as NextTickQueueManager<U>;\n }\n\n /**\n * Create a new queue manager\n * @param id Unique identifier for this queue manager\n * @param processor Function to process the queued item\n * @param debug Enable debug logging for this instance\n */\n private constructor(id: string, processor: (item: T) => void, debug = false) {\n this.id = id;\n this.processor = processor;\n this.logger = Logger.getLogger(`NextTickQueueManager:${id}`, debug);\n this.logger.debug('Instance created');\n }\n\n /**\n * Queue an item to be processed in the next tick\n * Only the latest item will be processed if multiple are queued\n * @param item Item to be processed\n */\n queue(item: T): void {\n const now = performance.now();\n this.queueCount++;\n\n // Calculate time since last queue if applicable\n let timeSinceLastQueue = 0;\n if (this.lastQueueTime > 0) {\n timeSinceLastQueue = now - this.lastQueueTime;\n }\n this.lastQueueTime = now;\n\n this.logger.debug(\n `Queue #${this.queueCount} (${timeSinceLastQueue.toFixed(2)}ms since last queue)`,\n this.processingPromise ? 'Already processing, will replace pending item' : 'Will process in next tick',\n );\n\n // Store the latest item\n this.pendingItem = item;\n\n // Only create a new processing promise if one isn't already in progress\n if (!this.processingPromise) {\n this.logger.debug('Scheduling processing for next tick');\n this.processingPromise = nextTick().then(() => this.process());\n } else {\n this.logger.debug('Processing already scheduled, item will replace pending item');\n }\n }\n\n /**\n * Process the queued item\n * @private\n */\n private async process(): Promise<void> {\n const startTime = performance.now();\n this.processCount++;\n\n this.logger.debug(`Process #${this.processCount} started`);\n\n // Get the latest item and reset state\n const item = this.pendingItem;\n this.pendingItem = null;\n this.processingPromise = null;\n\n // Process the item if it exists\n if (item !== null && item !== undefined) {\n this.logger.debug('Processing item');\n try {\n this.processor(item);\n this.logger.perf(`Process #${this.processCount} completed`, startTime);\n } catch (error) {\n this.logger.error(`Error processing item: ${error}`);\n }\n } else {\n this.logger.debug('No item to process');\n }\n }\n\n /**\n * Clear the queue and cancel any pending processing\n */\n clear(): void {\n this.logger.debug('Clearing queue');\n this.pendingItem = null;\n this.processingPromise = null;\n }\n\n /**\n * Get queue statistics\n */\n getStats(): { queueCount: number; processCount: number; pendingItems: number } {\n return {\n queueCount: this.queueCount,\n processCount: this.processCount,\n pendingItems: this.pendingItem ? 1 : 0,\n };\n }\n}\n","import type { UnwrapRef } from 'vue';\nimport { reactive } from 'vue';\nimport { Logger } from './Logger';\nimport { NextTickQueueManager } from './NextTickQueueManager';\n\n/**\n * Specialized queue manager for efficiently updating reactive objects\n * Optimizes updates by only changing properties that have actually changed\n */\nexport class ReactiveUpdater<T extends Record<string, any>> {\n private static instances = new Map<string, ReactiveUpdater<any>>();\n private static logger = Logger.getLogger('ReactiveUpdater');\n\n private queueManager: NextTickQueueManager<T>;\n private targetObject: Record<string, any> | null = null;\n private logger: Logger;\n private id: string;\n private updateCount = 0;\n private keyUpdateStats = new Map<string, { updates: number; skipped: number }>();\n\n /**\n * Enable or disable debug logging for all ReactiveUpdater instances\n */\n static setDebug(enabled: boolean): void {\n this.logger.setDebug(enabled);\n this.logger.debug(`Debug ${enabled ? 'enabled' : 'disabled'} for all instances`);\n\n // Update all existing instances\n this.instances.forEach((instance) => {\n instance.logger.setDebug(enabled);\n // Also update the queue manager debug state\n NextTickQueueManager.setDebug(enabled);\n });\n }\n\n /**\n * Get or create a singleton instance with the given ID\n * @param id Unique identifier for this updater\n * @param debug Enable debug logging for this instance\n * @returns ReactiveUpdater instance\n */\n static getInstance<U extends Record<string, any>>(id: string, debug = false): ReactiveUpdater<U> {\n if (!this.instances.has(id)) {\n this.logger.debug(`Creating new instance with ID: ${id}`);\n this.instances.set(id, new ReactiveUpdater<U>(id, debug));\n } else {\n this.logger.debug(`Returning existing instance with ID: ${id}`);\n }\n return this.instances.get(id) as ReactiveUpdater<U>;\n }\n\n /**\n * Create a new reactive updater\n * @param id Unique identifier for this updater\n * @param debug Enable debug logging for this instance\n */\n private constructor(id: string, debug = false) {\n this.id = id;\n this.logger = Logger.getLogger(`ReactiveUpdater:${id}`, debug);\n this.logger.debug('Instance created');\n this.queueManager = NextTickQueueManager.getInstance<T>(id, (newValues) => this.processUpdate(newValues), debug);\n }\n\n /**\n * Set the target reactive object to update\n * @param target The reactive object to update\n */\n setTarget(target: Record<string, any>): void {\n this.logger.debug('Setting target object', target ? `Object with ${Object.keys(target).length} keys` : 'null');\n this.targetObject = target;\n }\n\n /**\n * Ensure the target object exists and is reactive\n * @param defaultValue Default value to use if target doesn't exist\n * @returns The target object\n */\n ensureTarget<U>(defaultValue?: U): Record<string, any> {\n if (!this.targetObject || typeof this.targetObject !== 'object') {\n this.logger.debug('Creating new reactive target object', defaultValue);\n this.targetObject = reactive(defaultValue || {}) as UnwrapRef<Record<string, any>>;\n } else {\n this.logger.debug('Using existing target object');\n }\n return this.targetObject;\n }\n\n /**\n * Queue an update to the reactive object\n * @param newValues New values to apply to the target\n */\n queueUpdate(newValues: T): void {\n this.logger.debug('Queueing update', {\n objectSize: Object.keys(newValues).length,\n firstFewKeys: Object.keys(newValues).slice(0, 3),\n });\n this.queueManager.queue(newValues);\n }\n\n /**\n * Process the update by efficiently applying changes to the target\n * @param newValues New values to apply\n * @private\n */\n private processUpdate(newValues: T): void {\n const startTime = performance.now();\n this.updateCount++;\n\n this.logger.debug(`Processing update #${this.updateCount}`);\n\n if (!newValues) {\n this.logger.debug('No values to update, skipping');\n return;\n }\n\n // Ensure target exists\n const target = this.ensureTarget();\n\n // Prepare all changes in a single pass\n const keysToRemove = Object.keys(target).filter((key) => !(key in newValues));\n const updates = new Map<string, any>();\n const skippedKeys: string[] = [];\n\n this.logger.debug(`Found ${keysToRemove.length} keys to remove`);\n\n // Identify which values need updating (with JSON comparison for deep equality)\n Object.entries(newValues).forEach(([key, value]) => {\n // Track statistics for this key\n if (!this.keyUpdateStats.has(key)) {\n this.keyUpdateStats.set(key, { updates: 0, skipped: 0 });\n }\n\n const stats = this.keyUpdateStats.get(key)!;\n\n // Compare values using JSON.stringify\n const currentValueJson = JSON.stringify(target[key]);\n const newValueJson = JSON.stringify(value);\n\n if (currentValueJson !== newValueJson) {\n updates.set(key, value);\n stats.updates++;\n } else {\n skippedKeys.push(key);\n stats.skipped++;\n }\n });\n\n this.logger.debug(`Found ${updates.size} keys to update and ${skippedKeys.length} keys to skip`, {\n updatingKeys: Array.from(updates.keys()).slice(0, 3),\n skippedKeys: skippedKeys.slice(0, 3),\n });\n\n // Only proceed if there are actual changes\n if (keysToRemove.length > 0 || updates.size > 0) {\n this.logger.debug('Applying changes to target object');\n\n // Apply all changes in a batch\n // 1. Remove keys that don't exist in new values\n if (keysToRemove.length > 0) {\n this.logger.debug(`Removing ${keysToRemove.length} keys: ${keysToRemove.join(', ')}`);\n keysToRemove.forEach((key) => {\n delete target[key];\n });\n }\n\n // 2. Update all changed values at once\n if (updates.size > 0) {\n this.logger.debug(`Updating ${updates.size} keys`);\n updates.forEach((value, key) => {\n target[key] = value;\n });\n }\n\n this.logger.perf(`Update #${this.updateCount} completed with changes`, startTime);\n } else {\n this.logger.debug('No changes needed, skipping update');\n this.logger.perf(`Update #${this.updateCount} completed (no changes)`, startTime);\n }\n }\n\n /**\n * Clear the queue and cancel any pending updates\n */\n clear(): void {\n this.logger.debug('Clearing queue');\n this.queueManager.clear();\n }\n\n /**\n * Get update statistics\n */\n getStats(): { updateCount: number; keyStats: Record<string, { updates: number; skipped: number }> } {\n return {\n updateCount: this.updateCount,\n keyStats: Object.fromEntries(this.keyUpdateStats),\n };\n }\n}\n","/**\n * Form state management hook\n * Provides reactive form state with proper reactivity handling\n */\n\nimport type { ComputedRef, UnwrapRef } from 'vue';\nimport { computed, nextTick, reactive, watch } from 'vue';\nimport { Logger } from '../utils/Logger';\nimport { ReactiveUpdater } from '../utils/ReactiveUpdater';\n\n/**\n * Form state interface\n */\nexport interface FormState<T, CalcType = any, ExtraDataType = any> {\n // The primary form data\n data: T;\n\n // Calculated values derived from the form data\n calculatedValues: CalcType;\n\n // Track field states\n touched: Record<string, boolean>;\n dirty: Record<string, boolean>;\n errors: Record<string, string>;\n\n // Form status\n isSubmitting: boolean;\n hasAttemptedSubmit: boolean;\n submitAttemptsCount: number;\n submitError: string | null;\n\n // Loading status\n isReady: boolean;\n isLoading: boolean;\n loadError: string | null;\n\n // Extra data loaded asynchronously\n extraData: ExtraDataType;\n}\n\n/**\n * Create and manage form state with proper reactivity\n *\n * @param initialData Initial form data\n * @param options Options for form state\n * @returns Form state and methods\n */\nexport function useFormState<T, CalcType = any, ExtraDataType = any>(\n initialData: T,\n options?: {\n hasFetchData?: boolean;\n calculationFn?: (data: T, extraData?: ExtraDataType) => CalcType;\n storeName: string; // Required store name for the form\n debug?: boolean; // Enable debug logging\n extraData?: ExtraDataType;\n },\n) {\n // Set up logging\n const logger = Logger.getLogger('FormState');\n if (options?.debug) {\n logger.setDebug(true);\n }\n\n logger.debug('Initializing form state with options:', options);\n // Create reactive state\n const state = reactive<FormState<T, CalcType>>({\n // The primary form data\n data: { ...initialData } as T,\n // Only calculate immediately if we don't have data to load\n calculatedValues: (!options?.hasFetchData && options?.calculationFn) ? \n (() => {\n try {\n return options.calculationFn!(initialData);\n } catch (error) {\n // Log the error\n console.error(`Error in initial calculation for ${options?.storeName || 'unknown form'}:`, error);\n // We'll set the load error after state initialization\n return {} as CalcType;\n }\n })() : ({} as CalcType),\n\n // Track field states\n touched: {} as Record<string, boolean>,\n dirty: {} as Record<string, boolean>,\n errors: {} as Record<string, string>,\n\n // Form status\n isSubmitting: false,\n hasAttemptedSubmit: false,\n submitAttemptsCount: 0,\n submitError: null as string | null,\n\n // Loading status - default based on whether fetchData is provided\n isReady: !options?.hasFetchData,\n isLoading: !!options?.hasFetchData,\n loadError: null as string | null,\n extraData: options?.extraData || ({} as ExtraDataType),\n });\n\n // Watch for changes in data and extra data, then update calculatedValues\n if (options?.calculationFn) {\n // Create a reactive updater for this form's calculated values with optional debug mode\n const reactiveUpdater = ReactiveUpdater.getInstance<Record<string, any>>(options.storeName, options.debug || false);\n\n // Set the target object to update\n reactiveUpdater.setTarget(state.calculatedValues as Record<string, any>);\n\n // Watch for changes in form data, extra data, and loading state\n watch(\n [() => state.data, () => state.extraData, () => state.isLoading],\n ([newData, extraData, isLoading], oldValues) => {\n // Skip calculations if the form is still loading\n if (isLoading) {\n logger.debug('Skipping calculations while form is loading');\n return;\n }\n \n // Check if this is the first calculation after loading completed\n const wasLoading = oldValues && oldValues[2] === true;\n if (wasLoading) {\n logger.debug('Form finished loading, calculating initial values');\n }\n \n // Calculate new values with error handling\n if (options.calculationFn) {\n try {\n const newCalculatedValues = options.calculationFn(newData as T, extraData);\n \n // Queue the update if it's an object\n if (newCalculatedValues && typeof newCalculatedValues === 'object') {\n reactiveUpdater.queueUpdate(newCalculatedValues as Record<string, any>);\n } else {\n // For non-objects, use direct assignment in the next tick\n nextTick(() => {\n state.calculatedValues = newCalculatedValues as unknown as UnwrapRef<CalcType>;\n });\n }\n \n // Clear any previous calculation error\n if (state.loadError && state.loadError.startsWith('Calculation error:')) {\n state.loadError = null;\n }\n } catch (error) {\n // Log the error\n console.error(`Error in calculation function for ${options.storeName}:`, error);\n \n // Set the error message\n const errorMessage = error instanceof Error ? error.message : 'Unknown calculation error';\n state.loadError = `Calculation error: ${errorMessage}`;\n \n // Log detailed information for debugging\n logger.error('Calculation failed with data:', newData);\n logger.error('Calculation failed with extraData:', extraData);\n }\n }\n },\n { deep: true },\n );\n }\n\n // Computed properties for reactive state\n const isValid = computed(() => Object.keys(state.errors).length === 0);\n const isDirty = computed(() => Object.keys(state.dirty).length > 0);\n const isSubmitting = computed(() => state.isSubmitting);\n const hasAttemptedSubmit = computed(() => state.hasAttemptedSubmit);\n const submitAttemptsCount = computed(() => state.submitAttemptsCount);\n const submitError = computed(() => state.submitError);\n const isReady = computed(() => state.isReady);\n const isLoading = computed(() => state.isLoading);\n const loadError = computed(() => state.loadError);\n\n /**\n * Reset the form state\n *\n * @param newInitialData Optional new initial data to reset to\n */\n function reset(newInitialData?: T): void {\n const dataToReset = newInitialData || initialData;\n\n // Clear current data while preserving reactivity\n Object.keys(state.data as Record<string, any>).forEach((key) => {\n delete (state.data as Record<string, any>)[key];\n });\n\n // Copy initial values to maintain reactivity\n Object.entries(dataToReset as Record<string, any>).forEach(([key, value]) => {\n (state.data as Record<string, any>)[key] = value;\n });\n\n // Reset tracking\n state.touched = {};\n state.dirty = {};\n state.errors = {};\n }\n\n /**\n * Set the submitting state\n *\n * @param value New submitting state\n */\n function setSubmitting(value: boolean): void {\n state.isSubmitting = value;\n\n // When we stop submitting and there's no error, we can clear the submit error\n if (value === false && state.submitError === null) {\n state.hasAttemptedSubmit = true;\n }\n }\n\n /**\n * Set the submit error\n *\n * @param error Error message or null to clear\n */\n function setSubmitError(error: string | null): void {\n state.submitError = error;\n }\n\n /**\n * Increment the submit attempts counter\n */\n function incrementSubmitAttempts(): void {\n state.submitAttemptsCount++;\n }\n\n /**\n * Set the loading state\n *\n * @param value New loading state\n */\n function setLoading(value: boolean): void {\n state.isLoading = value;\n if (value === false && state.loadError === null) {\n state.isReady = true;\n }\n }\n\n /**\n * Set the ready state\n *\n * @param value New ready state\n */\n function setReady(value: boolean): void {\n state.isReady = value;\n }\n\n /**\n * Set the load error\n *\n * @param error Error message or null to clear\n */\n function setLoadError(error: string | null): void {\n state.loadError = error;\n }\n\n /**\n * Update the extra data\n *\n * @param updates Partial updates to apply to the extra data\n */\n function updateExtraData<E = ExtraDataType>(updates: Partial<E>): void {\n state.extraData = { ...state.extraData, ...updates };\n }\n\n // Return the form state API\n return {\n state: state as FormState<T, CalcType, ExtraDataType>,\n // Create a computed ref for calculated values to ensure reactivity\n calculatedValues: computed(() => state.calculatedValues) as ComputedRef<CalcType>,\n isValid,\n isDirty,\n isSubmitting,\n hasAttemptedSubmit,\n submitAttemptsCount,\n submitError,\n isReady,\n isLoading,\n loadError,\n reset,\n setSubmitting,\n incrementSubmitAttempts,\n setSubmitError,\n setLoading,\n setReady,\n setLoadError,\n updateExtraData,\n };\n}\n\n/**\n * Result of the useFormState hook\n */\nexport type FormStateResult<T, CalcType = any, ExtraDataType = any> = ReturnType<\n typeof useFormState<T, CalcType, ExtraDataType>\n>;\n","/**\n * Functions for validating form data against schemas\n */\n\nimport { z } from 'zod';\nimport { Logger } from '../utils/Logger';\n\n/**\n * Validate form data against a schema\n *\n * @param schema The Zod schema to validate against\n * @param formData The form data to validate\n * @returns Validation result with success flag and errors\n */\nexport function validateForm<T extends z.ZodObject<any>>(\n schema: T,\n formData: any,\n options?: {\n logger?: Logger;\n }\n): {\n success: boolean;\n errors: Record<string, string>;\n} {\n const logger = options?.logger;\n logger?.debug('Validating form data against schema');\n const startTime = performance.now();\n const result = schema.safeParse(formData);\n\n if (result.success) {\n logger?.debug('Form validation successful');\n logger?.perf('Form validation completed', startTime);\n return {\n success: true,\n errors: {},\n };\n } else {\n // Format Zod errors into a more usable structure\n const formattedErrors: Record<string, string> = {};\n result.error.errors.forEach((err) => {\n const path = err.path.join('.');\n formattedErrors[path] = err.message;\n logger?.debug(`Validation error for ${path}:`, err.message);\n });\n \n logger?.debug('Form validation failed with errors:', formattedErrors);\n logger?.perf('Form validation completed', startTime);\n\n return {\n success: false,\n errors: formattedErrors,\n };\n }\n}\n\n/**\n * Extract error messages from a Zod validation error\n *\n * @param error Zod validation error\n * @returns Record mapping field paths to error messages\n */\nexport function formatZodErrors(error: z.ZodError): Record<string, string> {\n const formattedErrors: Record<string, string> = {};\n\n error.errors.forEach((err) => {\n const path = err.path.join('.');\n formattedErrors[path] = err.message;\n });\n\n return formattedErrors;\n}\n","/**\n * Form validation hook\n * Provides validation functions for form data\n */\n\nimport { z } from 'zod';\nimport { Logger } from '../utils/Logger';\nimport { SchemaCache } from '../utils/schemaUtils';\nimport { validateField as validateFieldUtil } from '../validation/fieldValidation';\nimport { validateForm as validateFormUtil } from '../validation/formValidation';\nimport type { FormState } from './useFormState';\n\n/**\n * Create form validation functions\n *\n * @param schema The Zod schema for validation\n * @param formState The form state to validate\n * @returns Validation functions\n */\nexport function useFormValidation<T>(schema: z.ZodObject<any>, formState: FormState<T>, options?: { debug?: boolean }) {\n // Set up logging\n const logger = Logger.getLogger('FormValidation');\n if (options?.debug) {\n logger.setDebug(true);\n }\n\n // Create schema cache for field validation\n const schemaCache = new SchemaCache();\n\n logger.debug('Initializing form validation with schema:', schema);\n\n /**\n * Validate the entire form\n *\n * @param options Options for validation\n * @param options.markErrorsAsTouched Whether to mark fields with errors as touched\n * @returns Whether validation was successful\n */\n function validate(options: { markErrorsAsTouched: boolean } = { markErrorsAsTouched: true }): boolean {\n const markErrorsAsTouched = options.markErrorsAsTouched;\n logger.debug(`Validating entire form${markErrorsAsTouched ? ' and marking errors as touched' : ''}`);\n const startTime = performance.now();\n\n // Use the centralized validation utility from formValidation.ts\n // This ensures consistent validation behavior across the application\n const validationResult = validateFormUtil(schema, formState.data);\n\n if (validationResult.success) {\n // Clear all errors\n logger.debug('Form validation successful');\n formState.errors = {};\n logger.perf('Form validation completed', startTime);\n return true;\n } else {\n // Apply the formatted errors to the form state\n logger.debug('Form validation failed with errors:', validationResult.errors);\n\n // Log each error individually for debugging\n Object.entries(validationResult.errors).forEach(([path, message]) => {\n logger.debug(`Validation error for ${path}:`, message);\n\n // If markErrorsAsTouched is true, mark this field as touched\n if (markErrorsAsTouched) {\n logger.debug(`Marking field with error as touched: ${path}`);\n formState.touched[path] = true;\n }\n });\n\n formState.errors = validationResult.errors;\n formState.hasAttemptedSubmit = true;\n logger.perf('Form validation completed', startTime);\n return false;\n }\n }\n\n /**\n * Validate a specific field\n *\n * @param path Path to the field to validate\n * @returns Whether validation was successful\n */\n function validateField(path: string): boolean {\n const startTime = performance.now();\n logger.debug(`Validating field: ${path}`);\n\n // Use the centralized validation utility from fieldValidation.ts\n // This ensures consistent validation behavior across the application\n const result = validateFieldUtil(schema, formState.data, path, schemaCache);\n\n if (result.success) {\n // Remove error if it exists\n if (formState.errors[path]) {\n logger.debug(`Clearing previous error for ${path}`);\n delete formState.errors[path];\n }\n logger.debug(`Validation successful for ${path}`);\n } else {\n // Set the error\n const errorMessage = result.error || 'Invalid value';\n logger.debug(`Validation failed for ${path}: ${errorMessage}`);\n formState.errors[path] = errorMessage;\n }\n\n logger.perf(`Field validation for ${path}`, startTime);\n return result.success;\n }\n\n return {\n validate,\n validateField,\n };\n}\n\n/**\n * Result of the useFormValidation hook\n */\nexport type FormValidationResult<T> = ReturnType<typeof useFormValidation<T>>;\n","/**\n * Functions for persisting form data to localStorage\n */\n\nimport { watch } from 'vue';\nimport { Logger } from '../utils/Logger';\n\n/**\n * Options for localStorage persistence\n */\nexport interface LocalStoragePersistenceOptions {\n /** The key to use for storing data in localStorage */\n storeName: string;\n /** Whether to enable persistence (default: true) */\n enabled?: boolean;\n /** Initial values to merge with stored data */\n initialValues?: any;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n/**\n * Set up localStorage persistence for form data\n *\n * @param formData Reactive form data object\n * @param options Persistence options\n * @returns Functions for managing persistence\n */\nexport function setupLocalStoragePersistence(formData: any, options: LocalStoragePersistenceOptions) {\n const { storeName, enabled = true, initialValues = {}, debug = false } = options;\n \n // Set up logging\n const logger = Logger.getLogger('LocalStoragePersistence');\n if (debug) {\n logger.setDebug(true);\n }\n \n logger.debug(`Initializing persistence for ${storeName}`);\n\n // Load data from localStorage if available\n function loadFromStorage() {\n if (!enabled) return;\n \n logger.debug(`Loading data from localStorage for ${storeName}`);\n const startTime = performance.now();\n\n try {\n const savedData = localStorage.getItem(storeName);\n if (savedData) {\n logger.debug(`Found saved data for ${storeName}`);\n const parsedData = JSON.parse(savedData);\n // Merge with initial values, preserving the structure\n Object.assign(formData, { ...initialValues, ...parsedData });\n logger.debug('Data merged with initial values');\n } else {\n logger.debug(`No saved data found for ${storeName}`);\n }\n } catch (e) {\n logger.error('Failed to load form data from localStorage:', e);\n }\n \n logger.perf('Loading from localStorage', startTime);\n }\n\n // Save data to localStorage\n function saveToStorage(data: any) {\n if (!enabled) return;\n \n logger.debug(`Saving data to localStorage for ${storeName}`);\n const startTime = performance.now();\n\n try {\n localStorage.setItem(storeName, JSON.stringify(data));\n logger.debug('Data saved successfully');\n } catch (e) {\n logger.error('Failed to save form data to localStorage:', e);\n }\n \n logger.perf('Saving to localStorage', startTime);\n }\n\n // Clear data from localStorage\n function clearStorage() {\n if (!enabled) return;\n\n try {\n localStorage.removeItem(storeName);\n } catch (e) {\n console.error('Failed to clear form data from localStorage:', e);\n }\n }\n\n // Initial load\n loadFromStorage();\n\n // Set up watcher for changes\n const stopWatcher = watch(\n () => formData,\n (newValue) => {\n saveToStorage(newValue);\n },\n { deep: true },\n );\n\n // Return functions for managing persistence\n return {\n loadFromStorage,\n saveToStorage,\n clearStorage,\n stopWatcher,\n };\n}\n","/**\n * Handler for extracting default values from Zod object schemas\n */\n\nimport { z } from 'zod';\n\n// Import the main function to handle recursive extraction\nimport { extractDefaultValues } from '../defaultValues';\n\n/**\n * Extracts default values from a Zod object schema\n *\n * @param schema The Zod object schema to extract default values from\n * @returns An object with default values for each property\n */\nexport function handleObjectSchema(schema: z.ZodObject<any>): Record<string, any> {\n const result: Record<string, any> = {};\n\n // Process each property in the object schema\n for (const [key, fieldSchema] of Object.entries(schema.shape)) {\n // Recursively extract default values for each field\n result[key] = extractDefaultValues(fieldSchema as z.ZodTypeAny);\n }\n\n return result;\n}\n","/**\n * Handlers for extracting default values from primitive Zod schemas\n */\n\nimport { z } from 'zod';\nimport { extractDefaultValues } from '../defaultValues';\n\n/**\n * Handles primitive and complex schema types to extract default values\n *\n * @param schema The Zod schema to extract default values from\n * @returns An appropriate default value for the schema type\n */\nexport function handlePrimitiveSchema(schema: z.ZodTypeAny): any {\n // String types\n if (schema instanceof z.ZodString) {\n return '';\n }\n\n // Number types\n else if (schema instanceof z.ZodNumber) {\n return 0;\n }\n\n // Boolean types\n else if (schema instanceof z.ZodBoolean) {\n return false;\n }\n\n // Enum types\n else if (schema instanceof z.ZodEnum) {\n return schema._def.values[0] || '';\n }\n\n // Literal types\n else if (schema instanceof z.ZodLiteral) {\n return schema._def.value;\n }\n\n // Collection types\n else if (schema instanceof z.ZodMap) {\n return new Map();\n } else if (schema instanceof z.ZodSet) {\n return new Set();\n } else if (schema instanceof z.ZodRecord) {\n return {};\n }\n\n // Function types\n else if (schema instanceof z.ZodFunction) {\n return (..._args: any[]) => undefined;\n }\n\n // Promise types\n else if (schema instanceof z.ZodPromise) {\n return Promise.resolve(undefined);\n }\n\n // Composition types\n else if (schema instanceof z.ZodIntersection) {\n return extractDefaultValues(schema._def.left);\n } else if (schema instanceof z.ZodDiscriminatedUnion) {\n const firstOption = schema._def.options[0];\n return extractDefaultValues(firstOption);\n } else if (schema instanceof z.ZodUnion) {\n const firstOption = schema._def.options[0];\n return extractDefaultValues(firstOption);\n }\n\n // Transformation types\n else if (schema instanceof z.ZodEffects) {\n return extractDefaultValues(schema._def.schema);\n } else if (schema instanceof z.ZodLazy) {\n return extractDefaultValues(schema._def.getter());\n } else if (schema instanceof z.ZodBranded) {\n return extractDefaultValues(schema._def.type);\n }\n\n // Enum types\n else if (schema instanceof z.ZodNativeEnum) {\n return Object.values(schema._def.values)[0];\n }\n\n // Date types\n else if (schema instanceof z.ZodDate) {\n return new Date();\n }\n\n // BigInt types\n else if (schema instanceof z.ZodBigInt) {\n return BigInt(0);\n }\n\n // Symbol types\n else if (schema instanceof z.ZodSymbol) {\n return Symbol();\n }\n\n // Any/unknown/never/void types\n else if (\n schema instanceof z.ZodAny ||\n schema instanceof z.ZodUnknown ||\n schema instanceof z.ZodNever ||\n schema instanceof z.ZodVoid\n ) {\n return undefined;\n }\n\n // Default case\n else {\n return undefined;\n }\n}\n","/**\n * Functions for extracting default values from Zod schemas\n */\n\nimport { z } from 'zod';\nimport { handleObjectSchema } from './handlers/objectHandler';\nimport { handlePrimitiveSchema } from './handlers/primitiveHandlers';\n\n/**\n * Extracts default values from a Zod schema\n *\n * @param schema The Zod schema to extract default values from\n * @returns An object with default values based on the schema\n */\nexport function extractDefaultValues<T extends z.ZodTypeAny>(schema: T): any {\n // Handle ZodObject\n if (schema instanceof z.ZodObject) {\n return handleObjectSchema(schema);\n }\n // Handle ZodArray\n else if (schema instanceof z.ZodArray) {\n return [];\n }\n\n // Recursively unwrap nested wrapper schemas to find the default value\n let unwrappedSchema = schema;\n let foundDefault: any = undefined;\n let foundNullable = false;\n\n while (true) {\n if (unwrappedSchema instanceof z.ZodDefault) {\n // Store the first default value we encounter (outermost takes precedence)\n if (foundDefault === undefined) {\n foundDefault = unwrappedSchema._def.defaultValue();\n }\n unwrappedSchema = unwrappedSchema._def.innerType;\n } else if (unwrappedSchema instanceof z.ZodOptional) {\n unwrappedSchema = unwrappedSchema._def.innerType;\n } else if (unwrappedSchema instanceof z.ZodNullable) {\n foundNullable = true;\n unwrappedSchema = unwrappedSchema._def.innerType;\n } else {\n // No more wrapper schemas to unwrap\n break;\n }\n }\n\n // Return the found default value, or null if nullable and no default, or fallback to primitive default\n if (foundDefault !== undefined) {\n return foundDefault;\n }\n if (foundNullable) {\n return null;\n }\n \n // Handle primitive and other types\n return handlePrimitiveSchema(unwrappedSchema);\n}\n","/**\n * Create a type-safe form system using functional components\n * This approach provides better performance and type safety\n *\n * This is an enhanced version of useForm with support for async loading and data merging\n */\n\nimport { provide } from 'vue';\nimport { z } from 'zod';\nimport { createBaseComponents, generateFieldComponents } from './components';\nimport {\n getFieldError,\n getFieldValue,\n hasFieldError,\n isDirtyField,\n isTouched,\n resetField,\n setFieldValue,\n touchField,\n} from './fields/fieldOperations';\nimport { useFormMetadata } from './hooks/useFormMetadata';\nimport { useFormState } from './hooks/useFormState';\nimport { useFormValidation } from './hooks/useFormValidation';\nimport { setupLocalStoragePersistence } from './persistence';\nimport { extractDefaultValues } from './schema/defaultValues';\n// Import the RegisteredStyleName type for autocomplete support\nimport type { MergeOptions } from './types/MergeOptions';\nimport type { RegisteredStyleName } from './types/registeredStyles';\nimport { SchemaCache } from './utils/schemaUtils';\n\n// Pre-define form key strings instead of using Symbols\nexport const ZINIA_FORM_KEY = 'ziniaForm';\nexport const ZINIA_FIELDS_KEY = 'ziniaFields';\nexport const ZINIA_FIELDS_GENERIC_KEY = 'ziniaFieldsGeneric';\nexport const ZINIA_FORM_SCHEMA_KEY = 'ziniaFormSchema';\n\ntype DataLoaderReturnTypes<T> = {\n [K in keyof T]: T[K] extends () => Promise<infer R> ? R : never;\n};\n\n/**\n * Create a type-safe form system using functional components\n *\n * @param schema The Zod schema for the form\n * @param options Form options\n * @returns Form API and components\n */\n// useForm now supports calculated fields via calculationFn\nexport function useForm<\n T extends z.ZodObject<any>,\n // Infer CalcType from calculationFn if provided\n CalcType = (values: z.infer<T>, extraData?: DataLoaderReturnTypes<Record<string, () => Promise<any>>>) => any,\n // Infer ExtraDataType from dataLoaders\n ExtraDataType = DataLoaderReturnTypes<Record<string, () => Promise<any>>>,\n>(\n schema: T,\n options: {\n storeName: string;\n schemaId?: string;\n persistToLocalStorage?: boolean;\n initialValues?: Partial<z.infer<typeof schema>>;\n renderStyle?: RegisteredStyleName; // Now provides autocomplete for registered styles\n autoProvide?: boolean;\n validateOnMount?: boolean;\n\n // Data loading and merging options\n mergeOptions?: MergeOptions<z.infer<typeof schema>>;\n\n // Generic data loading configuration\n dataLoaders?: {\n // Key is the name of the data set, value is the loader function\n [K in keyof ExtraDataType]?: () => Promise<ExtraDataType[K]>;\n };\n\n // Function to fetch form data from the server\n // If provided, the form will have a load() method that uses this function\n fetchData?: () => Promise<z.infer<typeof schema>>;\n\n // This will be passed to useFormState to calculate derived values from form data\n // The second parameter is the extra data that was loaded\n calculationFn?: (values: z.infer<T>, extraData?: ExtraDataType) => CalcType;\n\n // Debug options for different form components\n debug?: {\n // Enable all debugging\n all?: boolean;\n // Debug specific components\n formState?: boolean;\n validation?: boolean;\n calculations?: boolean;\n persistence?: boolean;\n reactivity?: boolean;\n };\n },\n) {\n // Extract default values from schema\n const defaultValues = extractDefaultValues(schema) as z.infer<typeof schema>;\n\n // Merge with initial values if provided\n const initialFormData = { ...defaultValues, ...options.initialValues } as z.infer<typeof schema>;\n\n // Get metadata for the form\n const { schemaId: _schemaId, fieldsMetadata } = useFormMetadata(schema, {\n schemaId: options.schemaId,\n storeName: options.storeName,\n });\n\n // Create form state with loading status and calculation function\n // Pass initialFormData (merged default values with initial values) instead of just defaultValues\n const formState = useFormState<z.infer<T>, CalcType, ExtraDataType>(initialFormData, {\n hasFetchData: !!options.fetchData || (options.dataLoaders && Object.keys(options.dataLoaders).length > 0),\n calculationFn: options.calculationFn, // Pass the calculation function directly\n storeName: options.storeName, // Pass the store name to useFormState\n debug: options.debug?.all || options.debug?.formState, // Pass appropriate debug flag\n // No need to explicitly initialize extraData, useFormState handles this with a fallback\n });\n\n // Set up validation\n const validation = useFormValidation(schema, formState.state, {\n debug: options.debug?.all || options.debug?.validation,\n });\n\n // Set up localStorage persistence if enabled\n if (options.persistToLocalStorage) {\n setupLocalStoragePersistence(formState.state.data, {\n storeName: options.storeName,\n initialValues: options.initialValues,\n debug: options.debug?.all || options.debug?.persistence,\n });\n }\n\n // Create form components using registered styles\n const { Form, SubmitButton, ResetButton, FormErrorsSummary } = createBaseComponents(schema, options.renderStyle);\n\n // Generate field components using registered styles\n const formFields = generateFieldComponents(schema, fieldsMetadata, options.renderStyle);\n\n // Create a schema cache for field operations\n const schemaCache = new SchemaCache();\n\n // Create the form API\n const form = {\n // Form identification\n storeName: options.storeName,\n // Direct access to the reactive form data\n values: formState.state.data,\n // Access to calculated values (now a computed property)\n get calculatedValues(): CalcType {\n return formState.calculatedValues.value;\n },\n // Access to extra data loaded from data loaders\n get extraData(): ExtraDataType {\n return formState.state.extraData;\n },\n\n // State properties\n get isValid() {\n return formState.isValid.value;\n },\n get isDirty() {\n return formState.isDirty.value;\n },\n get isSubmitting() {\n return formState.isSubmitting.value;\n },\n set isSubmitting(value: boolean) {\n formState.setSubmitting(value);\n },\n get hasAttemptedSubmit() {\n return formState.hasAttemptedSubmit.value;\n },\n get submitAttemptsCount() {\n return formState.submitAttemptsCount.value;\n },\n get errors() {\n return formState.state.errors;\n },\n get touched() {\n return formState.state.touched;\n },\n get dirty() {\n return formState.state.dirty;\n },\n fieldsMetadata,\n\n // Form methods\n validate: validation.validate,\n validateField: validation.validateField,\n reset: formState.reset,\n setSubmitting: formState.setSubmitting,\n incrementSubmitAttempts: formState.incrementSubmitAttempts,\n setSubmitError: formState.setSubmitError,\n\n // Loading and error state\n get isReady() {\n return formState.isReady.value;\n },\n get isLoading() {\n return formState.isLoading.value;\n },\n get loadError() {\n return formState.loadError.value;\n },\n get submitError() {\n return formState.submitError.value;\n },\n setLoading: formState.setLoading,\n setReady: formState.setReady,\n setLoadError: formState.setLoadError,\n\n // Field operations - using existing fieldOperations.ts\n getValue: (path: string): any => getFieldValue(formState.state, path),\n\n setValue: (path: string, value: any): void =>\n setFieldValue(formState.state, initialFormData, path, value, schema, schemaCache),\n\n touchField: (path: string): void => touchField(formState.state, path),\n\n isTouched: (path: string): boolean => isTouched(formState.state, path),\n\n isDirtyField: (path: string): boolean => isDirtyField(formState.state, path),\n\n resetField: (path: string): void => resetField(formState.state, initialFormData, path, schema, schemaCache),\n\n hasError: (path: string): boolean => hasFieldError(formState.state, path),\n\n getError: (path: string): string => getFieldError(formState.state, path),\n };\n\n // Provide form context to child components\n if (options.autoProvide !== false) {\n provide(ZINIA_FORM_SCHEMA_KEY, schema);\n provide(ZINIA_FORM_KEY, form);\n provide(ZINIA_FIELDS_KEY, formFields.typed);\n provide(ZINIA_FIELDS_GENERIC_KEY, formFields.generic);\n }\n\n // Validate on mount if requested\n if (options.validateOnMount) {\n validation.validate();\n }\n\n /**\n * Process server data by merging with any local changes\n */\n const processServerData = (serverData: z.infer<typeof schema>): z.infer<typeof schema> => {\n // Check if we have locally stored data\n let localData: Partial<z.infer<typeof schema>> | null = null;\n try {\n const storedData = localStorage.getItem(options.storeName);\n if (storedData) {\n localData = JSON.parse(storedData);\n }\n } catch (e) {\n console.error('Failed to load form data from localStorage:', e);\n }\n\n // If no local data, just return server data\n if (!localData) return serverData;\n\n // Merge server data with local changes\n if (options.mergeOptions?.customMergeFunction) {\n // Use custom merge function if provided\n return options.mergeOptions.customMergeFunction(serverData, localData as z.infer<typeof schema>);\n } else if (options.mergeOptions?.preserveLocalFields) {\n // Preserve specific fields from local data\n const mergedData = { ...serverData };\n options.mergeOptions.preserveLocalFields.forEach((field) => {\n if (localData && localData[field] !== undefined) {\n (mergedData as any)[field] = localData[field];\n }\n });\n return mergedData;\n } else {\n // Default merge: local data takes precedence to preserve user changes\n return { ...serverData, ...localData };\n }\n };\n\n /**\n * Load data using the provided fetchData function\n */\n const load = async (): Promise<void> => {\n if (!options.fetchData) {\n console.error('No fetchData function provided');\n return;\n }\n\n formState.setLoading(true);\n formState.setLoadError(null);\n formState.setReady(false);\n\n try {\n // Fetch data using the provided function\n const serverData = await options.fetchData();\n\n // Process and merge the data\n const mergedData = processServerData(serverData);\n\n // Reset the form with the merged data\n formState.reset(mergedData);\n\n // Validate if requested\n if (options.validateOnMount) {\n validation.validate();\n }\n\n // Mark as ready\n formState.setReady(true);\n } catch (error) {\n console.error('Error loading form data:', error);\n formState.setLoadError(error instanceof Error ? error.message : 'An unknown error occurred');\n } finally {\n formState.setLoading(false);\n }\n };\n\n /**\n * Clear any saved form state\n */\n const clearSavedFormState = () => {\n try {\n localStorage.removeItem(options.storeName);\n } catch (e) {\n console.error('Error removing from localStorage:', e);\n }\n };\n\n /**\n * Load all configured data sets\n */\n const loadAllData = async (): Promise<void> => {\n const hasDataLoaders = options.dataLoaders && Object.keys(options.dataLoaders).length > 0;\n const hasFetchData = !!options.fetchData;\n\n if (!hasDataLoaders && !hasFetchData) {\n console.log('No data loaders configured');\n return;\n }\n\n formState.setLoading(true);\n formState.setLoadError(null);\n formState.setReady(false);\n\n try {\n // First load all extra data if configured\n if (hasDataLoaders) {\n const loaders = options.dataLoaders!;\n const loaderKeys = Object.keys(loaders) as Array<keyof typeof loaders>;\n\n // Load all data sets in parallel\n const results = await Promise.all(\n loaderKeys.map(async (key) => {\n const loader = loaders[key];\n if (loader) {\n try {\n const data = await loader();\n return { key, data, error: null };\n } catch (error) {\n console.error(`Error loading data for ${String(key)}:`, error);\n return {\n key,\n data: null,\n error: error instanceof Error ? error.message : `Failed to load ${String(key)}`,\n };\n }\n }\n return { key, data: null, error: `No loader for ${String(key)}` };\n }),\n );\n\n // Process results\n let hasErrors = false;\n const updatedData: Partial<ExtraDataType> = {};\n\n results.forEach(({ key, data, error }) => {\n if (error) {\n hasErrors = true;\n } else if (data !== null) {\n // Collect the updated data\n updatedData[key as keyof ExtraDataType] = data;\n }\n });\n\n // Update extraData in a single operation to trigger reactivity only once\n if (Object.keys(updatedData).length > 0) {\n formState.updateExtraData(updatedData);\n }\n\n // If there were errors, throw to trigger error handling\n if (hasErrors) {\n const errorMessages = results\n .filter((r) => r.error)\n .map((r) => `${String(r.key)}: ${r.error}`)\n .join(', ');\n throw new Error(`Failed to load data: ${errorMessages}`);\n }\n }\n\n // Then load form data if configured\n if (hasFetchData) {\n await load();\n } else {\n // If we don't have fetchData, mark as ready\n formState.setReady(true);\n formState.setLoading(false);\n }\n } catch (error) {\n console.error('Error loading data:', error);\n formState.setLoadError(error instanceof Error ? error.message : 'An unknown error occurred loading data');\n formState.setLoading(false);\n }\n };\n\n /**\n * Refresh the form data by re-running the fetchData function\n * This is separate from refreshData which refreshes the extra data\n */\n const refreshFormData = async (): Promise<void> => {\n if (!options.fetchData) {\n console.warn('No fetchData function provided');\n return;\n }\n\n formState.setLoading(true);\n formState.setLoadError(null);\n\n try {\n // Fetch data using the provided function\n const serverData = await options.fetchData();\n\n // Process and merge the data\n const mergedData = processServerData(serverData);\n\n // Reset the form with the merged data\n formState.reset(mergedData);\n\n // Validate if requested\n if (options.validateOnMount) {\n validation.validate();\n }\n } catch (error) {\n console.error('Error refreshing form data:', error);\n formState.setLoadError(\n error instanceof Error ? error.message : 'An unknown error occurred refreshing form data',\n );\n } finally {\n formState.setLoading(false);\n }\n };\n\n // Create the form result object\n const formResult = {\n form,\n ZiniaForm: Form,\n ZiniaSubmitButton: SubmitButton,\n ZiniaResetButton: ResetButton,\n ZiniaFormErrorsSummary: FormErrorsSummary,\n zinia: formFields.typed,\n ziniaGeneric: formFields.generic,\n // Async methods\n load,\n loadAllData,\n refreshFormData,\n clearSavedFormState,\n // Extra data is now exposed through form.extraData\n\n // Method to refresh specific data sets by re-running their loaders\n refreshData: async (keys?: Array<keyof ExtraDataType>): Promise<void> => {\n if (!options.dataLoaders || Object.keys(options.dataLoaders).length === 0) {\n console.warn('No data loaders configured');\n return;\n }\n\n // If no keys provided, refresh all data\n const keysToRefresh = keys || (Object.keys(options.dataLoaders) as Array<keyof ExtraDataType>);\n\n // Filter to only include keys that have loaders\n const validKeys = keysToRefresh.filter((key) => !!options.dataLoaders?.[key]);\n\n if (validKeys.length === 0) {\n console.warn('No valid data loaders found for the specified keys');\n return;\n }\n\n // Set loading state\n formState.setLoading(true);\n formState.setLoadError(null);\n\n try {\n // Run the selected loaders in parallel\n const results = await Promise.all(\n validKeys.map(async (key) => {\n const loader = options.dataLoaders![key];\n if (!loader) return { key, data: null, error: `No loader for ${String(key)}` };\n\n try {\n const data = await loader();\n return { key, data, error: null };\n } catch (error) {\n console.error(`Error refreshing data for ${String(key)}:`, error);\n return {\n key,\n data: null,\n error: error instanceof Error ? error.message : `Failed to refresh ${String(key)}`,\n };\n }\n }),\n );\n\n // Process results\n let hasErrors = false;\n const updatedData: Partial<ExtraDataType> = {};\n\n results.forEach(({ key, data, error }) => {\n if (error) {\n hasErrors = true;\n } else if (data !== null) {\n // Collect the updated data\n updatedData[key as keyof ExtraDataType] = data;\n }\n });\n\n // Update extraData in a single operation\n if (Object.keys(updatedData).length > 0) {\n formState.updateExtraData(updatedData);\n }\n\n // If there were errors, show warnings but don't throw\n if (hasErrors) {\n const errorMessages = results\n .filter((r) => r.error)\n .map((r) => `${String(r.key)}: ${r.error}`)\n .join(', ');\n console.warn(`Some data refreshes failed: ${errorMessages}`);\n }\n\n return;\n } catch (error) {\n console.error('Error during data refresh:', error);\n formState.setLoadError(\n error instanceof Error ? error.message : 'An unknown error occurred refreshing data',\n );\n } finally {\n formState.setLoading(false);\n }\n },\n };\n\n // If we have any data loaders or fetch data, trigger the load\n if ((options.dataLoaders && Object.keys(options.dataLoaders).length > 0) || options.fetchData) {\n loadAllData().catch((e) => console.error('Error during initial load:', e));\n }\n\n return formResult;\n}\n\nexport type UseFormType = ReturnType<typeof useForm>;\nexport type ZiniaForm = UseFormType['form'];\nexport type ZiniaFormFields = UseFormType['zinia'];\nexport type ZiniaFormGenericFields = UseFormType['ziniaGeneric'];\n\n// No need for a separate async form type since all forms have async capabilities\n\nexport type UseFormTyped<\n T extends z.ZodObject<any>,\n CalcType = any,\n ExtraDataType extends Record<string, any> = Record<string, any>,\n> = ReturnType<typeof useForm<T, CalcType, ExtraDataType>>;\n","import { type FunctionalComponent } from 'vue';\n\nexport interface LoadingDisplayProps {\n message?: string;\n size?: 'sm' | 'md' | 'lg';\n class?: string;\n}\n\n// DaisyUI styled loading component\nexport const LoadingDisplay: FunctionalComponent<LoadingDisplayProps> = (props) => {\n const message = props.message || 'Loading data...';\n const sizeClass = props.size === 'sm' ? 'loading-md' : props.size === 'lg' ? 'loading-lg' : 'loading-lg';\n \n return (\n <div class={`flex flex-col items-center justify-center p-8 ${props.class || ''}`} data-testid=\"loading-display\">\n <div class={`loading loading-spinner ${sizeClass}`}></div>\n <p class=\"mt-4 text-lg\">{message}</p>\n </div>\n );\n};","import { type FunctionalComponent } from 'vue';\n\nexport interface ErrorDisplayProps {\n error: string | Error | unknown;\n class?: string;\n variant?: 'error' | 'warning' | 'info';\n}\n\n// DaisyUI styled error component\nexport const ErrorDisplay: FunctionalComponent<ErrorDisplayProps> = (props) => {\n const variant = props.variant || 'error';\n const alertClass = `alert alert-${variant}`;\n \n const errorMessage = typeof props.error === 'string' \n ? props.error \n : props.error instanceof Error \n ? props.error.message \n : 'An unknown error occurred';\n\n const getIcon = () => {\n switch (variant) {\n case 'warning':\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"stroke-current shrink-0 h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\" />\n </svg>\n );\n case 'info':\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" class=\"stroke-current shrink-0 w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n );\n default: // error\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"stroke-current shrink-0 h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n );\n }\n };\n\n return (\n <div class={`${alertClass} ${props.class || ''}`} data-testid=\"error-display\">\n {getIcon()}\n <span>{errorMessage}</span>\n </div>\n );\n};","import { type FunctionalComponent } from 'vue';\n\nexport interface NoDataDisplayProps {\n message?: string;\n class?: string;\n variant?: 'info' | 'warning';\n}\n\n// DaisyUI styled no data component\nexport const NoDataDisplay: FunctionalComponent<NoDataDisplayProps> = (props) => {\n const message = props.message || 'No data to display';\n const variant = props.variant || 'info';\n const alertClass = `alert alert-${variant}`;\n\n return (\n <div class={`${alertClass} ${props.class || ''}`} data-testid=\"no-data-display\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" class=\"stroke-current flex-shrink-0 w-6 h-6\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n <span>{message}</span>\n </div>\n );\n};","import type { RegisteredStyleName } from '../types/registeredStyles';\nimport { LoadingDisplay } from '../fields/daisy_ui/LoadingDisplay';\nimport { ErrorDisplay } from '../fields/daisy_ui/ErrorDisplay'; \nimport { NoDataDisplay } from '../fields/daisy_ui/NoDataDisplay';\n\n/**\n * Create state components (Loading, Error, NoData) for a specific render style\n */\nexport function createStateComponents(renderStyle: RegisteredStyleName = 'daisy_ui') {\n // For now, we only have DaisyUI components\n // In the future, we could add other style systems here\n switch (renderStyle) {\n case 'daisy_ui':\n default:\n return {\n LoadingDisplay,\n ErrorDisplay,\n NoDataDisplay,\n };\n }\n}","/**\n * Clean, efficient implementation of useDisplay\n * Key improvements:\n * - Single reactive state object (minimal reactivity overhead)\n * - Unified loading strategy with proper error boundaries\n * - Clear separation between sync/async modes\n * - Simplified TypeScript types\n * - Predictable API surface\n */\n\nimport { computed, provide, ref, unref, type Ref } from 'vue';\nimport { z } from 'zod';\nimport { createBaseDisplayComponents } from './components/createBaseDisplayComponents';\nimport { createStateComponents } from './components/createStateComponents';\nimport { generateDisplayComponents } from './components/generateDisplayComponents';\nimport { useFormMetadata } from './hooks/useFormMetadata';\nimport type { RegisteredStyleName } from './types/registeredStyles';\nimport { getValueByPath } from './utils/objectPath';\n// Constants\nexport const ZINIA_DISPLAY_KEY = 'ziniaDisplay';\nexport const ZINIA_DISPLAY_FIELDS_KEY = 'ziniaDisplayFields';\nexport const ZINIA_DISPLAY_FIELDS_GENERIC_KEY = 'ziniaDisplayFieldsGeneric';\nexport const ZINIA_DISPLAY_SCHEMA_KEY = 'ziniaDisplaySchema';\n\n// No need for a complex state interface - use individual refs for better type safety\n\ninterface DisplayOptions<TData, TExtra extends Record<string, any>> {\n // Core options\n data?: TData | Ref<TData>;\n schemaId?: string;\n storeName?: string; // Unique identifier for multiple displays on same page\n renderStyle?: RegisteredStyleName;\n autoProvide?: boolean;\n\n // External state (sync mode)\n loading?: boolean | Ref<boolean>;\n error?: string | null | Ref<string | null>;\n\n // Async data loading\n fetchData?: () => Promise<TData>;\n dataLoaders?: { [K in keyof TExtra]?: () => Promise<TExtra[K]> };\n autoLoad?: boolean;\n\n // Advanced options\n onLoad?: (data: TData) => void;\n onError?: (error: Error) => void;\n debug?: boolean;\n}\n\nexport function useDisplay<\n TSchema extends z.ZodObject<any>,\n TExtra extends Record<string, any> = Record<string, any>,\n>(schema: TSchema, options: DisplayOptions<z.infer<TSchema>, TExtra> = {}) {\n type TData = z.infer<TSchema>;\n\n // Use provided storeName or default to 'display'\n const storeName = options.storeName || 'display';\n\n // Get metadata\n const { fieldsMetadata } = useFormMetadata(schema, {\n schemaId: options.schemaId,\n storeName,\n });\n\n // Individual reactive refs for better type safety and Vue compatibility\n const internalData = ref<TData | null>(null);\n const extraData = ref<TExtra>({} as TExtra);\n const internalLoading = ref(false);\n const internalReady = ref(true); // Start ready for sync mode\n const internalError = ref<string | null>(null);\n const lastLoadTime = ref<number | null>(null);\n\n // Determine mode\n const isAsyncMode = !!(options.fetchData || options.dataLoaders);\n const hasExternalData = options.data !== undefined;\n\n // Core computed properties\n const displayData = computed(() => {\n if (hasExternalData) {\n return unref(options.data!);\n }\n return internalData.value;\n });\n\n const isLoading = computed(() => {\n if (options.loading !== undefined) {\n return unref(options.loading);\n }\n return internalLoading.value;\n });\n\n const displayError = computed(() => {\n if (options.error !== undefined) {\n return unref(options.error);\n }\n return internalError.value;\n });\n\n const isReady = computed(() => {\n if (!isAsyncMode) return true;\n return internalReady.value;\n });\n\n // Unified loading function - handles all async operations\n const load = async (\n options_: {\n data?: boolean;\n extra?: boolean;\n specificLoaders?: Array<keyof TExtra>;\n } = { data: true, extra: true },\n ): Promise<void> => {\n if (!isAsyncMode) {\n if (options.debug) console.warn('load() called in sync mode');\n return;\n }\n\n const { data: loadData = true, extra: loadExtra = true, specificLoaders } = options_;\n\n // Prepare loading state\n internalLoading.value = true;\n internalError.value = null;\n internalReady.value = false;\n\n try {\n const loadPromises: Promise<any>[] = [];\n\n // Load main data\n if (loadData && options.fetchData) {\n loadPromises.push(\n options.fetchData().then((data) => {\n internalData.value = data;\n options.onLoad?.(data);\n if (options.debug) console.log('Main data loaded:', data);\n }),\n );\n }\n\n // Load extra data\n if (loadExtra && options.dataLoaders) {\n const loadersToRun = specificLoaders\n ? specificLoaders.filter((key) => options.dataLoaders![key])\n : (Object.keys(options.dataLoaders) as Array<keyof TExtra>);\n\n for (const key of loadersToRun) {\n const loader = options.dataLoaders[key];\n if (loader) {\n loadPromises.push(\n loader()\n .then((data) => {\n (extraData.value as any)[key] = data;\n if (options.debug) console.log(`Extra data loaded for ${String(key)}:`, data);\n })\n .catch((error) => {\n if (options.debug) console.error(`Failed to load ${String(key)}:`, error);\n throw new Error(`Failed to load ${String(key)}: ${error.message}`);\n }),\n );\n }\n }\n }\n\n // Wait for all loads to complete\n if (loadPromises.length > 0) {\n await Promise.all(loadPromises);\n }\n\n // Success\n internalReady.value = true;\n lastLoadTime.value = Date.now();\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';\n internalError.value = errorMessage;\n options.onError?.(error instanceof Error ? error : new Error(errorMessage));\n\n if (options.debug) {\n console.error('Load failed:', error);\n }\n\n throw error; // Re-throw for caller handling\n } finally {\n internalLoading.value = false;\n }\n };\n\n // Convenience methods\n const loadData = () => load({ data: true, extra: false });\n const loadExtraData = (keys?: Array<keyof TExtra>) => load({ data: false, extra: true, specificLoaders: keys });\n const loadAllData = () => load({ data: true, extra: true });\n const refreshData = loadAllData;\n\n // Clear data\n const clear = () => {\n internalData.value = null;\n extraData.value = {} as TExtra;\n internalError.value = null;\n internalReady.value = !isAsyncMode;\n lastLoadTime.value = null;\n };\n\n // Create display components\n const { ZiniaDisplay } = createBaseDisplayComponents(schema, options.renderStyle);\n const { LoadingDisplay, ErrorDisplay, NoDataDisplay } = createStateComponents(options.renderStyle);\n const displayFields = generateDisplayComponents(schema, fieldsMetadata, options.renderStyle);\n\n // Create clean API object\n const display = {\n // Display identification\n storeName,\n // Data access\n get data(): TData | null {\n return displayData.value;\n },\n get extraData(): TExtra {\n return extraData.value;\n },\n\n // State\n get isLoading(): boolean {\n return isLoading.value;\n },\n get isReady(): boolean {\n return isReady.value;\n },\n get error(): string | null {\n return displayError.value;\n },\n get lastLoadTime(): number | null {\n return lastLoadTime.value;\n },\n\n // Metadata\n fieldsMetadata,\n get isAsyncMode(): boolean {\n return isAsyncMode;\n },\n\n // Operations\n load,\n loadData,\n loadExtraData,\n loadAllData,\n refreshData,\n clear,\n\n // Field operations\n getValue: (path: string): any => {\n const data = displayData.value;\n if (!data) return undefined;\n return getValueByPath(data, path);\n },\n };\n\n // Auto-provide context\n if (options.autoProvide !== false) {\n provide(ZINIA_DISPLAY_SCHEMA_KEY, schema);\n provide(ZINIA_DISPLAY_KEY, display);\n provide(ZINIA_DISPLAY_FIELDS_KEY, displayFields.typed);\n provide(ZINIA_DISPLAY_FIELDS_GENERIC_KEY, displayFields.generic);\n }\n\n // Auto-load if configured\n if (isAsyncMode && options.autoLoad !== false) {\n internalReady.value = false; // Set to loading state initially\n loadAllData().catch((error) => {\n if (options.debug) {\n console.error('Auto-load failed:', error);\n }\n });\n }\n\n // Return result\n return {\n display,\n // Components\n ZiniaDisplay,\n LoadingDisplay,\n ErrorDisplay,\n NoDataDisplay,\n zinia: displayFields.typed,\n ziniaGeneric: displayFields.generic,\n\n // Convenience methods at top level\n load,\n loadData,\n loadExtraData,\n loadAllData,\n refreshData,\n clear,\n };\n}\n\n// Export types - following the same pattern as useForm\nexport type UseDisplayType<\n TSchema extends z.ZodObject<any>,\n TExtra extends Record<string, any> = Record<string, any>,\n> = ReturnType<typeof useDisplay<TSchema, TExtra>>;\n\nexport type ZiniaDisplay<\n TSchema extends z.ZodObject<any> = z.ZodObject<any>,\n TExtra extends Record<string, any> = Record<string, any>,\n> = UseDisplayType<TSchema, TExtra>['display'];\n\nexport type ZiniaDisplayFields<\n TSchema extends z.ZodObject<any>,\n TExtra extends Record<string, any> = Record<string, any>,\n> = UseDisplayType<TSchema, TExtra>['zinia'];\n\nexport type ZiniaDisplayGenericFields<\n TSchema extends z.ZodObject<any>,\n TExtra extends Record<string, any> = Record<string, any>,\n> = UseDisplayType<TSchema, TExtra>['ziniaGeneric'];\n","/**\n * Create data table components for a specific render style\n */\n\nimport { z } from 'zod';\nimport { getDefaultStyle, getRegisteredStyle } from '../plugin';\nimport type { RegisteredStyleName } from '../types/registeredStyles';\n\nexport function createDataTableComponents<T extends z.ZodObject<any>>(\n schema: T,\n renderStyle?: RegisteredStyleName\n) {\n type FormType = z.infer<typeof schema>;\n\n // Get the style creators from registered styles\n const styleToUse = renderStyle || getDefaultStyle();\n const styleCreators = getRegisteredStyle(styleToUse);\n\n if (!styleCreators) {\n throw new Error(`Render style \"${styleToUse}\" is not registered. Make sure to register it with the ZiniaPlugin.`);\n }\n\n // Create the data table component\n const ZiniaDataTable = styleCreators.createDataTable<FormType>();\n\n return {\n ZiniaDataTable,\n };\n}","/**\n * useDataTableState - Manages all reactive state for data tables\n * Following the same pattern as useFormState\n */\n\nimport { ref, reactive, computed } from 'vue';\n\ninterface DataTableStateOptions {\n debug?: boolean;\n}\n\nexport function useDataTableState<TData>(\n initialData: TData[] = [],\n options: DataTableStateOptions = {}\n) {\n // Core data state\n const data = ref<TData[]>(initialData);\n const isLoading = ref(false);\n const error = ref<string | null>(null);\n const lastLoadTime = ref<number | null>(null);\n \n // Pagination state - using reactive for object\n const pagination = reactive({\n currentPage: 0,\n pageSize: 25,\n totalPages: 0,\n totalRows: 0,\n });\n \n // UI state - keep refs separate to avoid unwrapping issues\n const sortDrawerOpen = ref(false);\n \n // Sorting state - using reactive for object\n const sorting = reactive<{\n field: keyof TData | null;\n direction: 'asc' | 'desc';\n }>({\n field: null,\n direction: 'asc',\n });\n \n // Filtering state - simple object\n const filters = ref<Record<string, any>>({});\n \n // Search state - using reactive for object\n const search = reactive({\n query: '',\n searchableFields: [] as Array<keyof TData>,\n });\n \n // Selection state - using reactive for object\n const selection = reactive<{\n selectedRows: TData[];\n selectedRowKeys: Set<string | number>;\n isAllSelected: boolean;\n }>({\n selectedRows: [],\n selectedRowKeys: new Set(),\n isAllSelected: false,\n });\n \n // Computed properties\n const hasData = computed(() => data.value.length > 0);\n const isEmpty = computed(() => !isLoading.value && data.value.length === 0);\n const hasError = computed(() => !!error.value);\n \n const canGoNext = computed(() => pagination.currentPage < pagination.totalPages - 1);\n const canGoPrev = computed(() => pagination.currentPage > 0);\n \n const currentPageStart = computed(() => pagination.currentPage * pagination.pageSize + 1);\n const currentPageEnd = computed(() => \n Math.min((pagination.currentPage + 1) * pagination.pageSize, pagination.totalRows)\n );\n \n // State setters\n const setLoading = (loading: boolean) => {\n isLoading.value = loading;\n if (options.debug) {\n console.log('🔄 Table loading state:', loading);\n }\n };\n \n const setError = (err: string | null) => {\n error.value = err;\n if (options.debug && err) {\n console.error('❌ Table error:', err);\n }\n };\n \n const setData = (newData: TData[], total: number) => {\n data.value = newData;\n pagination.totalRows = total;\n pagination.totalPages = Math.ceil(total / pagination.pageSize);\n lastLoadTime.value = Date.now();\n \n // Clear selection when data changes\n selection.selectedRows = [];\n selection.selectedRowKeys.clear();\n selection.isAllSelected = false;\n \n if (options.debug) {\n console.log('✅ Table data updated:', {\n rows: newData.length,\n total: total,\n pages: pagination.totalPages,\n });\n }\n };\n \n const setPagination = (page?: number, pageSize?: number) => {\n if (page !== undefined) pagination.currentPage = page;\n if (pageSize !== undefined) {\n pagination.pageSize = pageSize;\n pagination.totalPages = Math.ceil(pagination.totalRows / pageSize);\n }\n };\n \n const setSorting = (field: keyof TData | null, direction: 'asc' | 'desc' = 'asc') => {\n sorting.field = field;\n sorting.direction = direction;\n };\n \n const setFilters = (newFilters: Record<string, any>) => {\n filters.value = newFilters;\n };\n \n const setSearch = (query: string, searchableFields?: Array<keyof TData>) => {\n search.query = query;\n if (searchableFields) {\n search.searchableFields = searchableFields;\n }\n };\n \n // Selection methods\n const getRowKey = (row: TData, keyField: keyof TData = 'id' as keyof TData): string | number => {\n return (row as any)[keyField];\n };\n \n const selectRow = (row: TData, mode: 'single' | 'multiple' = 'multiple', keyField: keyof TData = 'id' as keyof TData) => {\n const rowKey = getRowKey(row, keyField);\n \n if (mode === 'single') {\n // Single selection - replace current selection\n selection.selectedRows = [row];\n selection.selectedRowKeys.clear();\n selection.selectedRowKeys.add(rowKey);\n selection.isAllSelected = false;\n } else {\n // Multiple selection - toggle row\n if (selection.selectedRowKeys.has(rowKey)) {\n // Remove from selection\n selection.selectedRows = selection.selectedRows.filter(r => getRowKey(r, keyField) !== rowKey);\n selection.selectedRowKeys.delete(rowKey);\n } else {\n // Add to selection\n selection.selectedRows.push(row);\n selection.selectedRowKeys.add(rowKey);\n }\n \n // Update isAllSelected flag\n selection.isAllSelected = selection.selectedRows.length === data.value.length && data.value.length > 0;\n }\n };\n \n const selectAll = (keyField: keyof TData = 'id' as keyof TData) => {\n if (selection.isAllSelected) {\n // Deselect all\n selection.selectedRows = [];\n selection.selectedRowKeys.clear();\n selection.isAllSelected = false;\n } else {\n // Select all current page rows\n selection.selectedRows = [...data.value];\n selection.selectedRowKeys.clear();\n data.value.forEach(row => {\n selection.selectedRowKeys.add(getRowKey(row, keyField));\n });\n selection.isAllSelected = true;\n }\n };\n \n const clearSelection = () => {\n selection.selectedRows = [];\n selection.selectedRowKeys.clear();\n selection.isAllSelected = false;\n };\n \n const isRowSelected = (row: TData, keyField: keyof TData = 'id' as keyof TData): boolean => {\n return selection.selectedRowKeys.has(getRowKey(row, keyField));\n };\n \n // Create the state object that will be returned\n const state = {\n data,\n isLoading,\n error,\n lastLoadTime,\n pagination,\n sorting,\n filters,\n search,\n selection,\n \n // UI state\n sortDrawerOpen,\n \n // Computed properties\n hasData,\n isEmpty,\n hasError,\n canGoNext,\n canGoPrev,\n currentPageStart,\n currentPageEnd,\n };\n \n return {\n state,\n \n // State setters\n setLoading,\n setError,\n setData,\n setPagination,\n setSorting,\n setFilters,\n setSearch,\n \n // Selection methods\n selectRow,\n selectAll,\n clearSelection,\n isRowSelected,\n };\n}","/**\n * useDataTable - Schema-first, async data table composable\n * Following the same patterns as useForm for consistency\n */\n\nimport { provide, ref } from 'vue';\nimport { z } from 'zod';\nimport { createDataTableComponents } from './components/createDataTableComponents';\nimport { useDataTableState } from './hooks/useDataTableState';\nimport { useFormMetadata } from './hooks/useFormMetadata';\nimport type { RegisteredStyleName } from './types/registeredStyles';\n\n// Constants for injection\nexport const ZINIA_DATA_TABLE_KEY = 'ziniaDataTable';\nexport const ZINIA_DATA_TABLE_COLUMNS_KEY = 'ziniaDataTableColumns';\nexport const ZINIA_DATA_TABLE_OPTIONS_KEY = 'ziniaDataTableOptions';\nexport const ZINIA_DATA_TABLE_ACTIONS_KEY = 'ziniaDataTableActions';\nexport const ZINIA_DATA_TABLE_SEARCH_INPUT_KEY = 'ziniaDataTableSearchInput';\nexport const ZINIA_DATA_TABLE_FILTER_INPUTS_KEY = 'ziniaDataTableFilterInputs';\nexport const ZINIA_DATA_TABLE_FILTER_OPERATORS_KEY = 'ziniaDataTableFilterOperators';\nexport const ZINIA_DATA_TABLE_FILTER_OPTIONS_STATE_KEY = 'ziniaDataTableFilterOptionsState';\nexport const ZINIA_DATA_TABLE_FILTER_OPTIONS_LOADING_KEY = 'ziniaDataTableFilterOptionsLoading';\nexport const ZINIA_DATA_TABLE_NAME_KEY = 'ziniaDataTableName';\n\n// Core types\ninterface FilterValue {\n value: any;\n operator: 'eq' | 'contains' | 'gt' | 'lt' | 'in' | 'between';\n}\n\n// Actions configuration - supports both buttons and links\ninterface BaseActionItem<TData> {\n key: string;\n /**\n * Label for the action. Optional - you can have icon-only, label-only, or both.\n * At least one of label or icon must be provided.\n */\n label?: string;\n /**\n * Icon for the action. Optional - you can have icon-only, label-only, or both.\n * At least one of label or icon must be provided.\n *\n * Supports multiple formats:\n * - SVG string: ActionIcons.edit or '<svg>...</svg>'\n * - Vue component: import { PencilIcon } from '@heroicons/vue/24/outline'; then use PencilIcon\n * - Function: (row) => row.status === 'active' ? EditIcon : ViewIcon\n */\n icon?: string | any | ((row: TData) => any);\n variant?: 'primary' | 'secondary' | 'accent' | 'ghost' | 'info' | 'success' | 'warning' | 'error';\n size?: 'xs' | 'sm' | 'md' | 'lg';\n visible?: (row: TData) => boolean;\n disabled?: (row: TData) => boolean;\n}\n\ninterface ButtonActionItem<TData> extends BaseActionItem<TData> {\n type?: 'button'; // Optional for backward compatibility\n onClick: (row: TData, action: ActionItem<TData>) => void | Promise<void>;\n}\n\ninterface LinkActionItem<TData> extends BaseActionItem<TData> {\n type: 'link';\n href: (row: TData) => string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n}\n\ntype ActionItem<TData> = ButtonActionItem<TData> | LinkActionItem<TData>;\n\ninterface ActionsConfig<TData> {\n column?: {\n label?: string;\n align?: 'left' | 'center' | 'right';\n width?: number;\n };\n items: ActionItem<TData>[];\n}\n\ninterface ColumnDefinition<TData, TField extends keyof TData> {\n field?: TField;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n searchable?: boolean;\n align?: 'left' | 'center' | 'right';\n textWrap?: 'truncate' | 'wrap';\n\n // Type-safe formatters\n format?: (value: TData[TField], row: TData) => string;\n render?: (value: TData[TField], row: TData) => any;\n\n // Filter configuration\n filterType?: 'text' | 'select' | 'number' | 'boolean';\n filterOptions?: any[];\n filterOptionsLoader?: () => Promise<any[]>;\n\n // Sort label configuration\n sortLabels?: {\n asc: string;\n desc: string;\n };\n}\n\n// Fetch data parameters\ninterface FetchDataParams<TData> {\n page: number;\n pageSize: number;\n sort: {\n field: keyof TData;\n direction: 'asc' | 'desc';\n } | null;\n filters: Record<string, FilterValue>;\n search: {\n query: string;\n searchableFields: Array<keyof TData>;\n };\n}\n\n// Fetch data result\ninterface FetchDataResult<TData> {\n data: TData[];\n total: number;\n}\n\n// Main options interface\ninterface DataTableOptions<TData> {\n // Required data fetching function\n fetchData: (params: FetchDataParams<TData>) => Promise<FetchDataResult<TData>>;\n\n // Column definitions\n columns: {\n [K in keyof TData]?: ColumnDefinition<TData, K>;\n } & {\n // Allow additional columns that are not in the schema (like actions)\n [key: string]: ColumnDefinition<TData, any>;\n };\n\n // Actions configuration\n actions?: ActionsConfig<TData>;\n\n // Pagination options\n pagination?: {\n pageSize?: number;\n pageSizeOptions?: number[];\n };\n\n // Selection options\n selection?: {\n mode?: 'single' | 'multiple' | 'none';\n rowKey?: keyof TData;\n };\n\n // Sorting options\n sorting?: {\n default?: {\n field: keyof TData;\n direction: 'asc' | 'desc';\n };\n };\n\n // Search options\n search?: {\n searchableFields?: Array<keyof TData>;\n };\n\n // UI options\n renderStyle?: RegisteredStyleName;\n schemaId?: string;\n name?: string;\n autoProvide?: boolean;\n debug?: boolean;\n\n // Lifecycle hooks\n onLoad?: (data: TData[]) => void;\n onError?: (error: Error) => void;\n\n // Selection hooks\n onSelectionChange?: (selectedItems: TData[], selectionInfo: { count: number; isAllSelected: boolean }) => void;\n onBulkAction?: (action: string, selectedItems: TData[]) => void;\n}\n\nexport function useDataTable<TSchema extends z.ZodObject<any>>(\n schema: TSchema,\n options: DataTableOptions<z.infer<TSchema>>,\n) {\n type TData = z.infer<TSchema>;\n\n // Get metadata for schema - following useForm pattern\n const { fieldsMetadata } = useFormMetadata(schema, {\n schemaId: options.schemaId,\n storeName: 'dataTable',\n });\n\n // Create table state - following useForm pattern\n const tableState = useDataTableState<TData>([], {\n debug: options.debug,\n });\n\n // Create UI input state refs for debounced search and filters\n const searchInputValue = ref('');\n const filterInputValues = ref<Record<string, string>>({});\n const filterOperators = ref<Record<string, FilterValue['operator']>>({});\n const filterOptionsState = ref<Record<string, any[]>>({});\n const filterOptionsLoading = ref<Record<string, boolean>>({});\n\n // Initialize default values\n if (options.pagination?.pageSize) {\n tableState.setPagination(0, options.pagination.pageSize);\n }\n\n if (options.sorting?.default) {\n tableState.setSorting(options.sorting.default.field, options.sorting.default.direction);\n }\n\n if (options.search?.searchableFields) {\n tableState.setSearch('', options.search.searchableFields);\n }\n\n // Helper to extract active filters\n const extractActiveFilters = (filterState: Record<string, any>): Record<string, FilterValue> => {\n const activeFilters: Record<string, FilterValue> = {};\n Object.entries(filterState).forEach(([key, filter]) => {\n if (filter && filter.value !== '' && filter.value !== null && filter.value !== undefined) {\n activeFilters[key] = filter;\n }\n });\n return activeFilters;\n };\n\n // Load filter options for columns with filterOptionsLoader\n const loadFilterOptions = async (): Promise<void> => {\n const columnsWithLoaders = Object.entries(options.columns).filter(([_, col]) => col?.filterOptionsLoader);\n\n await Promise.all(\n columnsWithLoaders.map(async ([field, column]) => {\n filterOptionsLoading.value[field] = true;\n try {\n const options = await column.filterOptionsLoader!();\n filterOptionsState.value[field] = options;\n } catch (error) {\n console.error(`Failed to load filter options for ${field}:`, error);\n } finally {\n filterOptionsLoading.value[field] = false;\n }\n }),\n );\n };\n\n // Core data fetching function\n const fetchData = async (): Promise<void> => {\n try {\n tableState.setLoading(true);\n tableState.setError(null);\n\n if (options.debug) {\n console.log('🔄 Fetching table data with params:', {\n page: tableState.state.pagination.currentPage,\n pageSize: tableState.state.pagination.pageSize,\n sort: tableState.state.sorting.field\n ? {\n field: tableState.state.sorting.field,\n direction: tableState.state.sorting.direction,\n }\n : null,\n filters: extractActiveFilters(tableState.state.filters.value),\n search: {\n query: tableState.state.search.query,\n searchableFields: tableState.state.search.searchableFields,\n },\n });\n }\n\n const result = await options.fetchData({\n page: tableState.state.pagination.currentPage,\n pageSize: tableState.state.pagination.pageSize,\n sort: tableState.state.sorting.field\n ? {\n field: tableState.state.sorting.field,\n direction: tableState.state.sorting.direction,\n }\n : null,\n filters: extractActiveFilters(tableState.state.filters.value),\n search: {\n query: tableState.state.search.query,\n searchableFields: tableState.state.search.searchableFields,\n },\n });\n\n // Update state with results\n tableState.setData(result.data, result.total);\n\n options.onLoad?.(result.data);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error occurred';\n tableState.setError(errorMessage);\n options.onError?.(err instanceof Error ? err : new Error(errorMessage));\n\n throw err;\n } finally {\n tableState.setLoading(false);\n }\n };\n\n // Async operations\n const load = async (): Promise<void> => {\n await fetchData();\n };\n\n const refresh = async (): Promise<void> => {\n await loadFilterOptions(); // Reload options\n await fetchData();\n };\n\n const sort = async (field: keyof TData, direction?: 'asc' | 'desc'): Promise<void> => {\n // Toggle direction if same field and no direction specified\n const newDirection =\n tableState.state.sorting.field === field && direction === undefined\n ? tableState.state.sorting.direction === 'asc'\n ? 'desc'\n : 'asc'\n : direction || 'asc';\n\n tableState.setSorting(field, newDirection);\n tableState.setPagination(0); // Reset to first page\n\n await fetchData();\n };\n\n const clearSort = async (): Promise<void> => {\n tableState.setSorting(null);\n tableState.setPagination(0);\n await fetchData();\n };\n\n const setFilter = async (\n field: keyof TData,\n value: any,\n operator: FilterValue['operator'] = 'eq',\n ): Promise<void> => {\n const currentFilters = { ...tableState.state.filters.value };\n if (value === '' || value === null || value === undefined) {\n delete currentFilters[field as string];\n } else {\n currentFilters[field as string] = { value, operator };\n }\n tableState.setFilters(currentFilters);\n tableState.setPagination(0); // Reset to first page\n await fetchData();\n };\n\n const clearFilter = async (field: keyof TData): Promise<void> => {\n const currentFilters = { ...tableState.state.filters.value };\n delete currentFilters[field as string];\n tableState.setFilters(currentFilters);\n tableState.setPagination(0);\n await fetchData();\n };\n\n const clearAllFilters = async (): Promise<void> => {\n tableState.setFilters({});\n tableState.setPagination(0);\n await fetchData();\n };\n\n const setSearch = async (query: string): Promise<void> => {\n tableState.setSearch(query);\n tableState.setPagination(0); // Reset to first page\n await fetchData();\n };\n\n const clearSearch = async (): Promise<void> => {\n tableState.setSearch('');\n tableState.setPagination(0);\n await fetchData();\n };\n\n const goToPage = async (page: number): Promise<void> => {\n if (page >= 0 && page < tableState.state.pagination.totalPages) {\n tableState.setPagination(page);\n await fetchData();\n }\n };\n\n const setPageSize = async (size: number): Promise<void> => {\n tableState.setPagination(0, size); // Reset to first page with new size\n await fetchData();\n };\n\n const nextPage = async (): Promise<void> => {\n if (tableState.state.canGoNext.value) {\n await goToPage(tableState.state.pagination.currentPage + 1);\n }\n };\n\n const prevPage = async (): Promise<void> => {\n if (tableState.state.canGoPrev.value) {\n await goToPage(tableState.state.pagination.currentPage - 1);\n }\n };\n\n // Helper to trigger selection change callback\n const triggerSelectionChange = (): void => {\n if (options.onSelectionChange) {\n options.onSelectionChange(tableState.state.selection.selectedRows, {\n count: tableState.state.selection.selectedRows.length,\n isAllSelected: tableState.state.selection.isAllSelected,\n });\n }\n };\n\n // Bulk action trigger\n const triggerBulkAction = (action: string): void => {\n if (options.onBulkAction && tableState.state.selection.selectedRows.length > 0) {\n options.onBulkAction(action, tableState.state.selection.selectedRows);\n }\n };\n\n // Selection operations\n const selectRow = (row: TData): void => {\n if (options.selection?.mode === 'none') return;\n\n tableState.selectRow(\n row,\n options.selection?.mode || 'multiple',\n options.selection?.rowKey || ('id' as keyof TData),\n );\n\n triggerSelectionChange();\n };\n\n const selectAll = (): void => {\n if (options.selection?.mode !== 'multiple') return;\n tableState.selectAll(options.selection?.rowKey || ('id' as keyof TData));\n triggerSelectionChange();\n };\n\n const clearSelection = (): void => {\n tableState.clearSelection();\n triggerSelectionChange();\n };\n\n const isRowSelected = (row: TData): boolean => {\n return tableState.isRowSelected(row, options.selection?.rowKey || ('id' as keyof TData));\n };\n\n // Create the table API - following useForm pattern\n const table = {\n // Data access\n get data(): TData[] {\n return tableState.state.data.value;\n },\n\n // State\n get isLoading(): boolean {\n return tableState.state.isLoading.value;\n },\n get error(): string | null {\n return tableState.state.error.value;\n },\n get hasData(): boolean {\n return tableState.state.hasData.value;\n },\n get isEmpty(): boolean {\n return tableState.state.isEmpty.value;\n },\n get hasError(): boolean {\n return tableState.state.hasError.value;\n },\n get lastLoadTime(): number | null {\n return tableState.state.lastLoadTime.value;\n },\n\n // Pagination\n pagination: {\n get currentPage(): number {\n return tableState.state.pagination.currentPage;\n },\n get pageSize(): number {\n return tableState.state.pagination.pageSize;\n },\n get totalPages(): number {\n return tableState.state.pagination.totalPages;\n },\n get totalRows(): number {\n return tableState.state.pagination.totalRows;\n },\n get canGoNext(): boolean {\n return tableState.state.canGoNext.value;\n },\n get canGoPrev(): boolean {\n return tableState.state.canGoPrev.value;\n },\n get currentPageStart(): number {\n return tableState.state.currentPageStart.value;\n },\n get currentPageEnd(): number {\n return tableState.state.currentPageEnd.value;\n },\n get hasTotal(): boolean {\n return true; // Regular pagination always has total count\n },\n },\n\n // Sorting\n sorting: {\n get field(): keyof TData | null {\n return tableState.state.sorting.field;\n },\n get direction(): 'asc' | 'desc' {\n return tableState.state.sorting.direction;\n },\n },\n\n // Filtering\n filters: {\n get active(): Record<string, FilterValue> {\n return extractActiveFilters(tableState.state.filters.value);\n },\n get count(): number {\n return Object.keys(extractActiveFilters(tableState.state.filters.value)).length;\n },\n },\n\n // Search\n search: {\n get query(): string {\n return tableState.state.search.query;\n },\n get searchableFields(): Array<keyof TData> {\n return tableState.state.search.searchableFields;\n },\n },\n\n // Selection\n selection: {\n get selectedRows(): TData[] {\n return tableState.state.selection.selectedRows;\n },\n get selectedCount(): number {\n return tableState.state.selection.selectedRows.length;\n },\n get isAllSelected(): boolean {\n return tableState.state.selection.isAllSelected;\n },\n get hasSelection(): boolean {\n return tableState.state.selection.selectedRows.length > 0;\n },\n },\n\n // Operations\n load,\n refresh,\n sort,\n clearSort,\n setFilter,\n clearFilter,\n clearAllFilters,\n setSearch,\n clearSearch,\n goToPage,\n setPageSize,\n nextPage,\n prevPage,\n selectRow,\n selectAll,\n clearSelection,\n isRowSelected,\n triggerBulkAction,\n\n // UI state\n ui: {\n sortDrawerOpen: tableState.state.sortDrawerOpen,\n openSortDrawer: () => (tableState.state.sortDrawerOpen.value = true),\n closeSortDrawer: () => (tableState.state.sortDrawerOpen.value = false),\n },\n\n // Metadata\n fieldsMetadata,\n columns: options.columns,\n };\n\n // Create table components - following useForm pattern\n const { ZiniaDataTable } = createDataTableComponents(schema, options.renderStyle);\n\n // Auto-provide context - following useForm pattern\n if (options.autoProvide !== false) {\n provide(ZINIA_DATA_TABLE_KEY, table);\n provide(ZINIA_DATA_TABLE_COLUMNS_KEY, options.columns);\n provide(ZINIA_DATA_TABLE_OPTIONS_KEY, options);\n provide(ZINIA_DATA_TABLE_ACTIONS_KEY, options.actions);\n provide(ZINIA_DATA_TABLE_SEARCH_INPUT_KEY, searchInputValue);\n provide(ZINIA_DATA_TABLE_FILTER_INPUTS_KEY, filterInputValues);\n provide(ZINIA_DATA_TABLE_FILTER_OPERATORS_KEY, filterOperators);\n provide(ZINIA_DATA_TABLE_FILTER_OPTIONS_STATE_KEY, filterOptionsState);\n provide(ZINIA_DATA_TABLE_FILTER_OPTIONS_LOADING_KEY, filterOptionsLoading);\n provide(ZINIA_DATA_TABLE_NAME_KEY, options.name || 'datatable');\n }\n\n // Auto-load filter options and data on initialization - following useForm pattern\n loadFilterOptions().catch((err) => {\n if (options.debug) {\n console.error('Failed to load filter options:', err);\n }\n });\n\n fetchData().catch((err) => {\n if (options.debug) {\n console.error('Failed to auto-load table data:', err);\n }\n });\n\n return {\n table,\n\n // Components\n ZiniaDataTable,\n\n // Direct access to operations for convenience\n load,\n refresh,\n sort,\n clearSort,\n setFilter,\n clearFilter,\n clearAllFilters,\n setSearch,\n clearSearch,\n goToPage,\n setPageSize,\n nextPage,\n prevPage,\n selectRow,\n selectAll,\n clearSelection,\n isRowSelected,\n };\n}\n\n// Export types\nexport type UseDataTableType<TSchema extends z.ZodObject<any>> = ReturnType<typeof useDataTable<TSchema>>;\n\nexport type ZiniaDataTable<TSchema extends z.ZodObject<any>> = UseDataTableType<TSchema>['table'];\n\nexport type DataTableColumns<TData> = {\n [K in keyof TData]?: ColumnDefinition<TData, K>;\n};\n\nexport type {\n ActionItem,\n ActionsConfig,\n ButtonActionItem,\n ColumnDefinition,\n DataTableOptions,\n FetchDataParams,\n FetchDataResult,\n FilterValue,\n LinkActionItem,\n};\n","/**\n * useCursorDataTableState - Cursor-based pagination state management\n * Provides same interface as useDataTableState but with cursor pagination\n */\n\nimport { ref, reactive, computed } from 'vue';\n\ninterface CursorDataTableStateOptions {\n debug?: boolean;\n}\n\nexport function useCursorDataTableState<TData>(\n initialData: TData[] = [],\n options: CursorDataTableStateOptions = {}\n) {\n // Core data state (same as useDataTableState)\n const data = ref<TData[]>(initialData);\n const isLoading = ref(false);\n const error = ref<string | null>(null);\n const lastLoadTime = ref<number | null>(null);\n \n // Cursor-based pagination state\n const pagination = reactive({\n pageSize: 25,\n totalRows: 0,\n hasTotal: false, // Track if API provides total count\n hasNextPage: false,\n hasPreviousPage: false,\n currentCursor: undefined as string | undefined,\n prevPageCursor: undefined as string | undefined, // Backend-provided cursor for previous page\n nextPageCursor: undefined as string | undefined, // Backend-provided cursor for next page\n currentPageNumber: 0, // Track which page we're conceptually on\n });\n \n // UI state - keep refs separate to avoid unwrapping issues\n const sortDrawerOpen = ref(false);\n \n // Sorting state (same as useDataTableState)\n const sorting = reactive<{\n field: keyof TData | null;\n direction: 'asc' | 'desc';\n }>({\n field: null,\n direction: 'asc',\n });\n \n // Filtering state (same as useDataTableState)\n const filters = ref<Record<string, any>>({});\n \n // Search state (same as useDataTableState)\n const search = reactive({\n query: '',\n searchableFields: [] as Array<keyof TData>,\n });\n \n // Selection state (same as useDataTableState)\n const selection = reactive<{\n selectedRows: TData[];\n selectedRowKeys: Set<string | number>;\n isAllSelected: boolean;\n }>({\n selectedRows: [],\n selectedRowKeys: new Set(),\n isAllSelected: false,\n });\n \n // Computed properties - provide same interface as useDataTableState\n const hasData = computed(() => data.value.length > 0);\n const isEmpty = computed(() => !isLoading.value && data.value.length === 0);\n const hasError = computed(() => !!error.value);\n \n // Cursor-based navigation (different logic but same interface)\n const canGoNext = computed(() => pagination.hasNextPage);\n const canGoPrev = computed(() => pagination.hasPreviousPage);\n \n // Page display info (adapted for cursor pagination)\n const currentPageStart = computed(() => {\n return pagination.currentPageNumber * pagination.pageSize + 1;\n });\n const currentPageEnd = computed(() => {\n return pagination.currentPageNumber * pagination.pageSize + data.value.length;\n });\n \n // State setters - same interface as useDataTableState\n const setLoading = (loading: boolean) => {\n isLoading.value = loading;\n if (options.debug) {\n console.log('🔄 Cursor table loading state:', loading);\n }\n };\n \n const setError = (err: string | null) => {\n error.value = err;\n if (options.debug && err) {\n console.error('❌ Cursor table error:', err);\n }\n };\n \n // Cursor-specific setData with cursor pagination info\n const setData = (\n newData: TData[], \n total: number, \n cursorInfo: {\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n prevPageCursor?: string;\n nextPageCursor?: string;\n hasTotal?: boolean;\n }\n ) => {\n data.value = newData;\n pagination.totalRows = total;\n pagination.hasTotal = cursorInfo.hasTotal || false;\n pagination.hasNextPage = cursorInfo.hasNextPage;\n pagination.hasPreviousPage = cursorInfo.hasPreviousPage;\n pagination.prevPageCursor = cursorInfo.prevPageCursor;\n pagination.nextPageCursor = cursorInfo.nextPageCursor;\n lastLoadTime.value = Date.now();\n \n // Clear selection when data changes\n selection.selectedRows = [];\n selection.selectedRowKeys.clear();\n selection.isAllSelected = false;\n \n if (options.debug) {\n console.log('✅ Cursor table data updated:', {\n rows: newData.length,\n total: total,\n hasNextPage: cursorInfo.hasNextPage,\n hasPreviousPage: cursorInfo.hasPreviousPage,\n });\n }\n };\n \n // Simplified cursor navigation - backend handles all direction logic\n const setCursorNavigation = (cursor: string | undefined) => {\n pagination.currentCursor = cursor;\n \n // Update page number for display purposes\n if (!cursor) {\n // Going to first page\n pagination.currentPageNumber = 0;\n } else if (cursor === pagination.nextPageCursor) {\n // Going to next page\n pagination.currentPageNumber += 1;\n } else if (cursor === pagination.prevPageCursor) {\n // Going to previous page\n pagination.currentPageNumber = Math.max(0, pagination.currentPageNumber - 1);\n }\n // Note: If cursor is neither next/prev, we can't determine direction\n // This happens on initial load or when jumping to specific pages\n };\n \n const setPageSize = (pageSize: number) => {\n pagination.pageSize = pageSize;\n pagination.currentPageNumber = 0; // Reset to first page\n };\n \n // Same interface methods as useDataTableState\n const setSorting = (field: keyof TData | null, direction: 'asc' | 'desc' = 'asc') => {\n sorting.field = field;\n sorting.direction = direction;\n pagination.currentPageNumber = 0; // Reset to first page when sorting changes\n };\n \n const setFilters = (newFilters: Record<string, any>) => {\n filters.value = newFilters;\n pagination.currentPageNumber = 0; // Reset to first page when filters change\n };\n \n const setSearch = (query: string, searchableFields?: Array<keyof TData>) => {\n search.query = query;\n if (searchableFields) {\n search.searchableFields = searchableFields;\n }\n pagination.currentPageNumber = 0; // Reset to first page when search changes\n };\n \n // Selection methods (same as useDataTableState)\n const getRowKey = (row: TData, keyField: keyof TData = 'id' as keyof TData): string | number => {\n return (row as any)[keyField];\n };\n \n const selectRow = (row: TData, mode: 'single' | 'multiple' = 'multiple', keyField: keyof TData = 'id' as keyof TData) => {\n const rowKey = getRowKey(row, keyField);\n \n if (mode === 'single') {\n selection.selectedRows = [row];\n selection.selectedRowKeys.clear();\n selection.selectedRowKeys.add(rowKey);\n selection.isAllSelected = false;\n } else {\n if (selection.selectedRowKeys.has(rowKey)) {\n selection.selectedRows = selection.selectedRows.filter(r => getRowKey(r, keyField) !== rowKey);\n selection.selectedRowKeys.delete(rowKey);\n } else {\n selection.selectedRows.push(row);\n selection.selectedRowKeys.add(rowKey);\n }\n selection.isAllSelected = selection.selectedRows.length === data.value.length && data.value.length > 0;\n }\n };\n \n const selectAll = (keyField: keyof TData = 'id' as keyof TData) => {\n if (selection.isAllSelected) {\n selection.selectedRows = [];\n selection.selectedRowKeys.clear();\n selection.isAllSelected = false;\n } else {\n selection.selectedRows = [...data.value];\n selection.selectedRowKeys.clear();\n data.value.forEach(row => {\n selection.selectedRowKeys.add(getRowKey(row, keyField));\n });\n selection.isAllSelected = true;\n }\n };\n \n const clearSelection = () => {\n selection.selectedRows = [];\n selection.selectedRowKeys.clear();\n selection.isAllSelected = false;\n };\n \n const isRowSelected = (row: TData, keyField: keyof TData = 'id' as keyof TData): boolean => {\n return selection.selectedRowKeys.has(getRowKey(row, keyField));\n };\n \n // Return same interface as useDataTableState\n const state = {\n data,\n isLoading,\n error,\n lastLoadTime,\n pagination,\n sorting,\n filters,\n search,\n selection,\n \n // UI state\n sortDrawerOpen,\n \n // Computed properties\n hasData,\n isEmpty,\n hasError,\n canGoNext,\n canGoPrev,\n currentPageStart,\n currentPageEnd,\n };\n \n return {\n state,\n \n // State setters\n setLoading,\n setError,\n setData,\n setCursorNavigation,\n setPageSize,\n setSorting,\n setFilters,\n setSearch,\n \n // Selection methods\n selectRow,\n selectAll,\n clearSelection,\n isRowSelected,\n };\n}","/**\n * useCursorDataTable - Cursor-based pagination data table composable\n * Provides same API as useDataTable but with cursor-based pagination\n */\n\nimport { provide, ref } from 'vue';\nimport { z } from 'zod';\nimport { createDataTableComponents } from './components/createDataTableComponents';\nimport { useCursorDataTableState } from './hooks/useCursorDataTableState';\nimport { useFormMetadata } from './hooks/useFormMetadata';\nimport type { RegisteredStyleName } from './types/registeredStyles';\nimport {\n ZINIA_DATA_TABLE_ACTIONS_KEY,\n ZINIA_DATA_TABLE_COLUMNS_KEY,\n ZINIA_DATA_TABLE_FILTER_INPUTS_KEY,\n ZINIA_DATA_TABLE_FILTER_OPERATORS_KEY,\n ZINIA_DATA_TABLE_FILTER_OPTIONS_LOADING_KEY,\n ZINIA_DATA_TABLE_FILTER_OPTIONS_STATE_KEY,\n ZINIA_DATA_TABLE_KEY,\n ZINIA_DATA_TABLE_NAME_KEY,\n ZINIA_DATA_TABLE_OPTIONS_KEY,\n ZINIA_DATA_TABLE_SEARCH_INPUT_KEY,\n} from './useDataTable';\n\n// Re-export common types\nexport type {\n ActionItem,\n ActionsConfig,\n ButtonActionItem,\n ColumnDefinition,\n FilterValue,\n LinkActionItem,\n} from './useDataTable';\n\n// Cursor-specific interfaces\ninterface CursorFetchParams<TData> {\n cursor?: string; // Now comes from backend (nextPageCursor/prevPageCursor)\n pageSize: number;\n sort: {\n field: keyof TData;\n direction: 'asc' | 'desc';\n } | null;\n filters: Record<string, any>;\n search: {\n query: string;\n searchableFields: Array<keyof TData>;\n };\n}\n\ninterface CursorFetchResult<TData> {\n data: TData[];\n total?: number; // Optional - only if API provides total count\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n prevPageCursor?: string; // Backend-provided cursor for previous page\n nextPageCursor?: string; // Backend-provided cursor for next page\n}\n\n// Cursor data table options\ninterface CursorDataTableOptions<TData> {\n // Required cursor-based data fetching function\n fetchData: (params: CursorFetchParams<TData>) => Promise<CursorFetchResult<TData>>;\n\n // Column definitions (same as useDataTable)\n columns: {\n [K in keyof TData]?: import('./useDataTable').ColumnDefinition<TData, K>;\n } & {\n [key: string]: import('./useDataTable').ColumnDefinition<TData, any>;\n };\n\n // Actions configuration (same as useDataTable)\n actions?: import('./useDataTable').ActionsConfig<TData>;\n\n // Pagination options (same as useDataTable)\n pagination?: {\n pageSize?: number;\n pageSizeOptions?: number[];\n };\n\n // Selection options (same as useDataTable)\n selection?: {\n mode?: 'single' | 'multiple' | 'none';\n rowKey?: keyof TData;\n };\n\n // Sorting options (same as useDataTable)\n sorting?: {\n default?: {\n field: keyof TData;\n direction: 'asc' | 'desc';\n };\n };\n\n // Search options (same as useDataTable)\n search?: {\n searchableFields?: Array<keyof TData>;\n };\n\n // UI options (same as useDataTable)\n renderStyle?: RegisteredStyleName;\n schemaId?: string;\n name?: string;\n autoProvide?: boolean;\n debug?: boolean;\n\n // Lifecycle hooks (same as useDataTable)\n onLoad?: (data: TData[]) => void;\n onError?: (error: Error) => void;\n\n // Selection hooks (same as useDataTable)\n onSelectionChange?: (selectedItems: TData[], selectionInfo: { count: number; isAllSelected: boolean }) => void;\n onBulkAction?: (action: string, selectedItems: TData[]) => void;\n}\n\nexport function useCursorDataTable<TSchema extends z.ZodObject<any>>(\n schema: TSchema,\n options: CursorDataTableOptions<z.infer<TSchema>>,\n) {\n type TData = z.infer<TSchema>;\n\n // Get metadata for schema - same as useDataTable\n const { fieldsMetadata } = useFormMetadata(schema, {\n schemaId: options.schemaId,\n storeName: 'dataTable',\n });\n\n // Create cursor-based table state\n const tableState = useCursorDataTableState<TData>([], {\n debug: options.debug,\n });\n\n // Create UI input state refs for debounced search and filters\n const searchInputValue = ref('');\n const filterInputValues = ref<Record<string, string>>({});\n const filterOperators = ref<Record<string, import('./useDataTable').FilterValue['operator']>>({});\n const filterOptionsState = ref<Record<string, any[]>>({});\n const filterOptionsLoading = ref<Record<string, boolean>>({});\n\n // Initialize default values\n if (options.pagination?.pageSize) {\n tableState.setPageSize(options.pagination.pageSize);\n }\n\n if (options.sorting?.default) {\n tableState.setSorting(options.sorting.default.field, options.sorting.default.direction);\n }\n\n if (options.search?.searchableFields) {\n tableState.setSearch('', options.search.searchableFields);\n }\n\n // Helper to extract active filters (same as useDataTable)\n const extractActiveFilters = (filterState: Record<string, any>): Record<string, any> => {\n const activeFilters: Record<string, any> = {};\n Object.entries(filterState).forEach(([key, filter]) => {\n if (filter && filter.value !== '' && filter.value !== null && filter.value !== undefined) {\n activeFilters[key] = filter;\n }\n });\n return activeFilters;\n };\n\n // Load filter options for columns with filterOptionsLoader\n const loadFilterOptions = async (): Promise<void> => {\n const columnsWithLoaders = Object.entries(options.columns).filter(([_, col]) => col?.filterOptionsLoader);\n\n await Promise.all(\n columnsWithLoaders.map(async ([field, column]) => {\n filterOptionsLoading.value[field] = true;\n try {\n const options = await column.filterOptionsLoader!();\n filterOptionsState.value[field] = options;\n } catch (error) {\n console.error(`Failed to load filter options for ${field}:`, error);\n } finally {\n filterOptionsLoading.value[field] = false;\n }\n }),\n );\n };\n\n // Core cursor-based data fetching function\n const fetchData = async (): Promise<void> => {\n try {\n tableState.setLoading(true);\n tableState.setError(null);\n\n if (options.debug) {\n console.log('🔄 Fetching cursor table data with params:', {\n cursor: tableState.state.pagination.currentCursor,\n pageSize: tableState.state.pagination.pageSize,\n sort: tableState.state.sorting.field\n ? {\n field: tableState.state.sorting.field,\n direction: tableState.state.sorting.direction,\n }\n : null,\n filters: extractActiveFilters(tableState.state.filters.value),\n search: {\n query: tableState.state.search.query,\n searchableFields: tableState.state.search.searchableFields,\n },\n });\n }\n\n const result = await options.fetchData({\n cursor: tableState.state.pagination.currentCursor,\n pageSize: tableState.state.pagination.pageSize,\n sort: tableState.state.sorting.field\n ? {\n field: tableState.state.sorting.field,\n direction: tableState.state.sorting.direction,\n }\n : null,\n filters: extractActiveFilters(tableState.state.filters.value),\n search: {\n query: tableState.state.search.query,\n searchableFields: tableState.state.search.searchableFields,\n },\n });\n\n // Update state with cursor results\n tableState.setData(result.data, result.total || 0, {\n hasNextPage: result.hasNextPage,\n hasPreviousPage: result.hasPreviousPage,\n prevPageCursor: result.prevPageCursor,\n nextPageCursor: result.nextPageCursor,\n hasTotal: result.total !== undefined,\n });\n\n options.onLoad?.(result.data);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error occurred';\n tableState.setError(errorMessage);\n options.onError?.(err instanceof Error ? err : new Error(errorMessage));\n\n throw err;\n } finally {\n tableState.setLoading(false);\n }\n };\n\n // Async operations (same interface as useDataTable)\n const load = async (): Promise<void> => {\n await fetchData();\n };\n\n const refresh = async (): Promise<void> => {\n await loadFilterOptions(); // Reload options\n await fetchData();\n };\n\n const sort = async (field: keyof TData, direction?: 'asc' | 'desc'): Promise<void> => {\n const newDirection =\n tableState.state.sorting.field === field && direction === undefined\n ? tableState.state.sorting.direction === 'asc'\n ? 'desc'\n : 'asc'\n : direction || 'asc';\n\n tableState.setSorting(field, newDirection);\n tableState.setCursorNavigation(undefined); // Reset to first page\n\n await fetchData();\n };\n\n const clearSort = async (): Promise<void> => {\n tableState.setSorting(null);\n tableState.setCursorNavigation(undefined);\n await fetchData();\n };\n\n const setFilter = async (field: keyof TData, value: any, operator: any = 'eq'): Promise<void> => {\n const currentFilters = { ...tableState.state.filters.value };\n if (value === '' || value === null || value === undefined) {\n delete currentFilters[field as string];\n } else {\n currentFilters[field as string] = { value, operator };\n }\n tableState.setFilters(currentFilters);\n tableState.setCursorNavigation(undefined); // Reset to first page\n await fetchData();\n };\n\n const clearFilter = async (field: keyof TData): Promise<void> => {\n const currentFilters = { ...tableState.state.filters.value };\n delete currentFilters[field as string];\n tableState.setFilters(currentFilters);\n tableState.setCursorNavigation(undefined);\n await fetchData();\n };\n\n const clearAllFilters = async (): Promise<void> => {\n tableState.setFilters({});\n tableState.setCursorNavigation(undefined);\n await fetchData();\n };\n\n const setSearch = async (query: string): Promise<void> => {\n tableState.setSearch(query);\n tableState.setCursorNavigation(undefined); // Reset to first page\n await fetchData();\n };\n\n const clearSearch = async (): Promise<void> => {\n tableState.setSearch('');\n tableState.setCursorNavigation(undefined);\n await fetchData();\n };\n\n // Cursor-based navigation (different implementation, same interface)\n const nextPage = async (): Promise<void> => {\n if (tableState.state.canGoNext.value && tableState.state.pagination.nextPageCursor) {\n tableState.setCursorNavigation(tableState.state.pagination.nextPageCursor);\n await fetchData();\n }\n };\n\n const prevPage = async (): Promise<void> => {\n if (tableState.state.canGoPrev.value) {\n // prevPageCursor can be undefined (meaning first page) - that's valid!\n tableState.setCursorNavigation(tableState.state.pagination.prevPageCursor);\n await fetchData();\n }\n };\n\n const firstPage = async (): Promise<void> => {\n tableState.setCursorNavigation(undefined);\n await fetchData();\n };\n\n const setPageSize = async (size: number): Promise<void> => {\n tableState.setPageSize(size);\n tableState.setCursorNavigation(undefined); // Reset to first page\n await fetchData();\n };\n\n // Selection logic (same as useDataTable)\n const triggerSelectionChange = (): void => {\n if (options.onSelectionChange) {\n options.onSelectionChange(tableState.state.selection.selectedRows, {\n count: tableState.state.selection.selectedRows.length,\n isAllSelected: tableState.state.selection.isAllSelected,\n });\n }\n };\n\n const triggerBulkAction = (action: string): void => {\n if (options.onBulkAction && tableState.state.selection.selectedRows.length > 0) {\n options.onBulkAction(action, tableState.state.selection.selectedRows);\n }\n };\n\n const selectRow = (row: TData): void => {\n if (options.selection?.mode === 'none') return;\n\n tableState.selectRow(\n row,\n options.selection?.mode || 'multiple',\n options.selection?.rowKey || ('id' as keyof TData),\n );\n\n triggerSelectionChange();\n };\n\n const selectAll = (): void => {\n if (options.selection?.mode !== 'multiple') return;\n tableState.selectAll(options.selection?.rowKey || ('id' as keyof TData));\n triggerSelectionChange();\n };\n\n const clearSelection = (): void => {\n tableState.clearSelection();\n triggerSelectionChange();\n };\n\n const isRowSelected = (row: TData): boolean => {\n return tableState.isRowSelected(row, options.selection?.rowKey || ('id' as keyof TData));\n };\n\n // Create the table API - SAME INTERFACE as useDataTable\n const table = {\n // Data access\n get data(): TData[] {\n return tableState.state.data.value;\n },\n\n // State\n get isLoading(): boolean {\n return tableState.state.isLoading.value;\n },\n get error(): string | null {\n return tableState.state.error.value;\n },\n get hasData(): boolean {\n return tableState.state.hasData.value;\n },\n get isEmpty(): boolean {\n return tableState.state.isEmpty.value;\n },\n get hasError(): boolean {\n return tableState.state.hasError.value;\n },\n get lastLoadTime(): number | null {\n return tableState.state.lastLoadTime.value;\n },\n\n // Pagination - SAME INTERFACE (cursor implementation hidden)\n pagination: {\n get currentPage(): number {\n // Return the tracked page number (UI adds +1 to display)\n return tableState.state.pagination.currentPageNumber;\n },\n get pageSize(): number {\n return tableState.state.pagination.pageSize;\n },\n get totalPages(): number {\n // Only calculate total pages if API provided total count\n if (!tableState.state.pagination.hasTotal) {\n return -1; // Special value indicating unknown total pages\n }\n return Math.ceil(tableState.state.pagination.totalRows / tableState.state.pagination.pageSize);\n },\n get totalRows(): number {\n return tableState.state.pagination.totalRows;\n },\n get hasTotal(): boolean {\n return tableState.state.pagination.hasTotal;\n },\n get canGoNext(): boolean {\n return tableState.state.canGoNext.value;\n },\n get canGoPrev(): boolean {\n return tableState.state.canGoPrev.value;\n },\n get currentPageStart(): number {\n return tableState.state.currentPageStart.value;\n },\n get currentPageEnd(): number {\n return tableState.state.currentPageEnd.value;\n },\n },\n\n // Sorting (same interface)\n sorting: {\n get field(): keyof TData | null {\n return tableState.state.sorting.field;\n },\n get direction(): 'asc' | 'desc' {\n return tableState.state.sorting.direction;\n },\n },\n\n // Filtering (same interface)\n filters: {\n get active(): Record<string, any> {\n return extractActiveFilters(tableState.state.filters.value);\n },\n get count(): number {\n return Object.keys(extractActiveFilters(tableState.state.filters.value)).length;\n },\n },\n\n // Search (same interface)\n search: {\n get query(): string {\n return tableState.state.search.query;\n },\n get searchableFields(): Array<keyof TData> {\n return tableState.state.search.searchableFields;\n },\n },\n\n // Selection (same interface)\n selection: {\n get selectedRows(): TData[] {\n return tableState.state.selection.selectedRows;\n },\n get selectedCount(): number {\n return tableState.state.selection.selectedRows.length;\n },\n get isAllSelected(): boolean {\n return tableState.state.selection.isAllSelected;\n },\n get hasSelection(): boolean {\n return tableState.state.selection.selectedRows.length > 0;\n },\n },\n\n // Operations (same interface)\n load,\n refresh,\n sort,\n clearSort,\n setFilter,\n clearFilter,\n clearAllFilters,\n setSearch,\n clearSearch,\n nextPage,\n prevPage,\n firstPage,\n setPageSize,\n selectRow,\n selectAll,\n clearSelection,\n isRowSelected,\n triggerBulkAction,\n\n // UI state\n ui: {\n sortDrawerOpen: tableState.state.sortDrawerOpen,\n openSortDrawer: () => (tableState.state.sortDrawerOpen.value = true),\n closeSortDrawer: () => (tableState.state.sortDrawerOpen.value = false),\n },\n\n // Metadata\n fieldsMetadata,\n columns: options.columns,\n };\n\n // Create table components - same as useDataTable\n const { ZiniaDataTable } = createDataTableComponents(schema, options.renderStyle);\n\n // Auto-provide context - same as useDataTable\n if (options.autoProvide !== false) {\n provide(ZINIA_DATA_TABLE_KEY, table);\n provide(ZINIA_DATA_TABLE_COLUMNS_KEY, options.columns);\n provide(ZINIA_DATA_TABLE_OPTIONS_KEY, options);\n provide(ZINIA_DATA_TABLE_ACTIONS_KEY, options.actions);\n provide(ZINIA_DATA_TABLE_SEARCH_INPUT_KEY, searchInputValue);\n provide(ZINIA_DATA_TABLE_FILTER_INPUTS_KEY, filterInputValues);\n provide(ZINIA_DATA_TABLE_FILTER_OPERATORS_KEY, filterOperators);\n provide(ZINIA_DATA_TABLE_FILTER_OPTIONS_STATE_KEY, filterOptionsState);\n provide(ZINIA_DATA_TABLE_FILTER_OPTIONS_LOADING_KEY, filterOptionsLoading);\n provide(ZINIA_DATA_TABLE_NAME_KEY, options.name || 'datatable');\n }\n\n // Auto-load filter options and data on initialization\n loadFilterOptions().catch((err) => {\n if (options.debug) {\n console.error('Failed to load filter options:', err);\n }\n });\n\n fetchData().catch((err) => {\n if (options.debug) {\n console.error('Failed to auto-load cursor table data:', err);\n }\n });\n\n // Return SAME INTERFACE as useDataTable\n return {\n table,\n\n // Components\n ZiniaDataTable,\n\n // Direct access to operations for convenience\n load,\n refresh,\n sort,\n clearSort,\n setFilter,\n clearFilter,\n clearAllFilters,\n setSearch,\n clearSearch,\n nextPage,\n prevPage,\n firstPage,\n setPageSize,\n selectRow,\n selectAll,\n clearSelection,\n isRowSelected,\n };\n}\n\n// Export types\nexport type UseCursorDataTableType<TSchema extends z.ZodObject<any>> = ReturnType<\n typeof useCursorDataTable<TSchema>\n>;\n\nexport type { CursorDataTableOptions, CursorFetchParams, CursorFetchResult };\n","/**\n * Delete modal implementation for Zinia Forms\n * Key features:\n * - Displays data for confirmation before deletion\n * - Handles delete operation with loading states\n * - Error handling for failed delete operations\n * - Callback support for successful deletion\n * - Display components for modal content\n */\n\nimport { provide, computed, unref, ref, type Ref } from 'vue';\nimport { z } from 'zod';\nimport { generateDisplayComponents } from './components/generateDisplayComponents';\nimport { createBaseDisplayComponents } from './components/createBaseDisplayComponents';\nimport { createStateComponents } from './components/createStateComponents';\nimport { useFormMetadata } from './hooks/useFormMetadata';\nimport type { RegisteredStyleName } from './types/registeredStyles';\nimport { getRegisteredStyle } from './plugin';\nimport { getValueByPath } from './utils/objectPath';\n// Constants\nexport const ZINIA_DELETE_MODAL_KEY = 'ziniaDeleteModal';\nexport const ZINIA_DELETE_MODAL_FIELDS_KEY = 'ziniaDeleteModalFields';\nexport const ZINIA_DELETE_MODAL_FIELDS_GENERIC_KEY = 'ziniaDeleteModalFieldsGeneric';\nexport const ZINIA_DELETE_MODAL_SCHEMA_KEY = 'ziniaDeleteModalSchema';\n\n// No need for a complex state interface - use individual refs for better type safety\n\ninterface DeleteModalOptions<TData> {\n // Core options\n data: TData | Ref<TData>;\n schemaId?: string;\n renderStyle?: RegisteredStyleName;\n autoProvide?: boolean;\n \n // External state\n loading?: boolean | Ref<boolean>;\n error?: string | null | Ref<string | null>;\n \n // Delete operation\n onDeleteConfirm: (data: TData) => Promise<void>;\n \n // Callbacks\n onDeleteSuccess?: () => void;\n onDeleteError?: (error: Error) => void;\n debug?: boolean;\n}\n\nexport function useDeleteModal<\n TSchema extends z.ZodObject<any>\n>(\n schema: TSchema,\n options: DeleteModalOptions<z.infer<TSchema>>\n) {\n type TData = z.infer<TSchema>;\n\n // Get metadata\n const { fieldsMetadata } = useFormMetadata(schema, {\n schemaId: options.schemaId,\n storeName: 'deleteModal',\n });\n\n // Individual reactive refs for better type safety and Vue compatibility\n const internalLoading = ref(false);\n const internalError = ref<string | null>(null);\n\n // Core computed properties\n const displayData = computed(() => {\n return unref(options.data);\n });\n\n const isLoading = computed(() => {\n if (options.loading !== undefined) {\n return unref(options.loading);\n }\n return internalLoading.value;\n });\n\n const displayError = computed(() => {\n if (options.error !== undefined) {\n return unref(options.error);\n }\n return internalError.value;\n });\n\n // Delete confirmation function\n const confirmDelete = async (): Promise<void> => {\n const data = displayData.value;\n if (!data) {\n const error = new Error('No data available for deletion');\n options.onDeleteError?.(error);\n throw error;\n }\n\n // Prepare loading state\n internalLoading.value = true;\n internalError.value = null;\n\n try {\n await options.onDeleteConfirm(data);\n \n // Success\n options.onDeleteSuccess?.();\n \n if (options.debug) {\n console.log('Delete confirmed successfully:', data);\n }\n \n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Delete operation failed';\n internalError.value = errorMessage;\n const deleteError = error instanceof Error ? error : new Error(errorMessage);\n options.onDeleteError?.(deleteError);\n \n if (options.debug) {\n console.error('Delete failed:', error);\n }\n \n throw deleteError; // Re-throw for caller handling\n } finally {\n internalLoading.value = false;\n }\n };\n\n // Clear error state\n const clearError = () => {\n internalError.value = null;\n };\n\n // Create delete modal components using the style system\n const styleToUse = options.renderStyle || 'daisy_ui';\n const styleCreators = getRegisteredStyle(styleToUse);\n \n if (!styleCreators) {\n throw new Error(`Render style \"${styleToUse}\" is not registered. Make sure to register it with the ZiniaPlugin.`);\n }\n \n const ZiniaDeleteModal = styleCreators.createDeleteModal();\n const { LoadingDisplay, ErrorDisplay, NoDataDisplay } = createStateComponents(options.renderStyle);\n const displayFields = generateDisplayComponents(schema, fieldsMetadata, options.renderStyle);\n\n // Create clean API object\n const deleteModal = {\n // Data access\n get data(): TData {\n return displayData.value;\n },\n\n // State\n get isLoading(): boolean {\n return isLoading.value;\n },\n get error(): string | null {\n return displayError.value;\n },\n\n // Metadata\n fieldsMetadata,\n\n // Operations\n confirmDelete,\n clearError,\n\n // Field operations\n getValue: (path: string): any => {\n const data = displayData.value;\n if (!data) return undefined;\n return getValueByPath(data, path);\n },\n };\n\n // Auto-provide context\n if (options.autoProvide !== false) {\n provide(ZINIA_DELETE_MODAL_SCHEMA_KEY, schema);\n provide(ZINIA_DELETE_MODAL_KEY, deleteModal);\n provide(ZINIA_DELETE_MODAL_FIELDS_KEY, displayFields.typed);\n provide(ZINIA_DELETE_MODAL_FIELDS_GENERIC_KEY, displayFields.generic);\n }\n\n // Return result\n return {\n deleteModal, \n // Components\n ZiniaDeleteModal, // Complete modal component with styling\n LoadingDisplay,\n ErrorDisplay,\n NoDataDisplay,\n zinia: displayFields.typed,\n ziniaGeneric: displayFields.generic,\n \n // Convenience methods at top level\n confirmDelete,\n clearError,\n };\n}\n\n// Export types\nexport type UseDeleteModalType<\n TSchema extends z.ZodObject<any>\n> = ReturnType<typeof useDeleteModal<TSchema>>;\n\nexport type ZiniaDeleteModal<\n TSchema extends z.ZodObject<any>\n> = UseDeleteModalType<TSchema>['deleteModal'];\n\nexport type ZiniaDeleteModalFields<\n TSchema extends z.ZodObject<any>\n> = UseDeleteModalType<TSchema>['zinia'];\n\nexport type ZiniaDeleteModalGenericFields<\n TSchema extends z.ZodObject<any>\n> = UseDeleteModalType<TSchema>['ziniaGeneric'];","import { type FunctionalComponent, getCurrentInstance, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { ArrayFieldProps } from '../types/ArrayFieldProps';\n\n// Define the slots interface for proper typing\ninterface ArrayFieldSlots<ItemType> {\n itemRenderer: (props: { \n item: ItemType; \n index: number; \n getFieldName: (fieldPath: string) => string;\n }) => any;\n availableItemRenderer: (props: { \n item: ItemType; \n index: number;\n }) => any;\n default: () => any;\n}\n\n// DaisyUI styled array field component\nexport function createDaisyUIArrayField<FormType, ItemType = any>() {\n const DaisyUIArrayField: FunctionalComponent<\n ArrayFieldProps<FormType, ItemType>,\n {}, // Emits (empty object)\n ArrayFieldSlots<ItemType> // Slots interface\n > = (props, { attrs: _attrs, slots }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('ArrayField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Get the current array value\n const arrayValue: ItemType[] = formState.getValue(props.name) || [];\n\n // Handle auto-prefixing for nested fields if enabled\n const getFieldName = (fieldPath: string, index: number) => {\n if (props.autoPrefixFields) {\n return `${props.name}.${index}.${fieldPath}`;\n }\n return fieldPath;\n };\n\n // Get the component instance for emitting events\n const instance = getCurrentInstance();\n\n // Function to add an item to the array\n const addItem = (item: ItemType) => {\n const currentArray = [...arrayValue];\n\n // Check if we've reached the maximum number of items\n if (maxItems !== undefined && currentArray.length >= maxItems) {\n return;\n }\n\n // Create a copy of the item to avoid reference issues\n const itemCopy = JSON.parse(JSON.stringify(item));\n\n // Always handle internally first\n currentArray.push(itemCopy);\n formState.setValue(props.name, currentArray);\n\n // Validate the field after modification\n formState.validateField(props.name);\n\n // Call the onAddItem hook if provided (for side effects, not state management)\n if (props.onAddItem) {\n props.onAddItem(itemCopy);\n }\n\n // Emit an event for the parent component\n if (instance) {\n instance.emit('item-added', itemCopy);\n }\n };\n\n // Function to remove an item from the array\n const removeItem = (index: number) => {\n const currentArray = [...arrayValue];\n\n // Check if we've reached the minimum number of items\n if (minItems !== undefined && currentArray.length <= minItems) {\n return;\n }\n\n // Store the item being removed for the event\n const removedItem = currentArray[index];\n\n // Always handle internally first\n currentArray.splice(index, 1);\n formState.setValue(props.name, currentArray);\n\n // Validate the field after modification\n formState.validateField(props.name);\n\n // Call the onRemoveItem hook if provided (for side effects, not state management)\n if (props.onRemoveItem) {\n props.onRemoveItem(index);\n }\n\n // Emit an event for the parent component\n if (instance) {\n instance.emit('item-removed', removedItem, index);\n }\n };\n\n // Function to update an item in the array\n const _updateItem = (_index: number, _updatedItem: ItemType) => {\n const currentArray = [...arrayValue];\n\n // Store the original item for the event\n const originalItem = currentArray[_index];\n\n // Always handle internally first\n currentArray[_index] = _updatedItem;\n formState.setValue(props.name, currentArray);\n\n // Validate the field after modification\n formState.validateField(props.name);\n\n // Call the onUpdateItem hook if provided (for side effects, not state management)\n if (props.onUpdateItem) {\n props.onUpdateItem(_index, _updatedItem);\n }\n\n // Emit an event for the parent component\n if (instance) {\n instance.emit('item-updated', originalItem, _updatedItem, _index);\n }\n };\n\n // Function to swap items in the array (move up/down)\n const swapItems = (indexA: number, indexB: number) => {\n if (indexA < 0 || indexA >= arrayValue.length || indexB < 0 || indexB >= arrayValue.length) {\n return;\n }\n\n const currentArray = [...arrayValue];\n\n // Always handle internally first\n const temp = currentArray[indexA];\n currentArray[indexA] = currentArray[indexB];\n currentArray[indexB] = temp;\n formState.setValue(props.name, currentArray);\n\n // Validate the field after modification\n formState.validateField(props.name);\n\n // Call the onSwapItems hook if provided (for side effects, not state management)\n if (props.onSwapItems) {\n props.onSwapItems(indexA, indexB);\n }\n\n // Emit an event for the parent component\n if (instance) {\n instance.emit('items-swapped', indexA, indexB, currentArray[indexA], currentArray[indexB]);\n }\n };\n\n // Function to move an item up in the array\n const moveItemUp = (index: number) => {\n if (index > 0) {\n swapItems(index, index - 1);\n }\n };\n\n // Function to move an item down in the array\n const moveItemDown = (index: number) => {\n if (index < arrayValue.length - 1) {\n swapItems(index, index + 1);\n }\n };\n\n // Function to create a new item\n const createNewItem = () => {\n if (props.createItem) {\n return props.createItem();\n }\n\n // Default empty object if no createItem function is provided\n return {} as ItemType;\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Extract min/max constraints from the schema metadata\n const minItems = props.minItems !== undefined ? props.minItems : fieldMetadata?.min;\n const maxItems = props.maxItems !== undefined ? props.maxItems : fieldMetadata?.max;\n\n // Create a mutable array for available items\n const availableItemsArray: ItemType[] = [];\n\n // First try to get items from props\n if (props.availableItems && props.availableItems.length > 0) {\n availableItemsArray.push(...props.availableItems);\n }\n // if no itmes in props get from field metadata\n else if (fieldMetadata?.availableItems) {\n availableItemsArray.push(...fieldMetadata.availableItems);\n }\n // If no items from props, try to get them from the itemsSource function\n else if (props.itemsSource) {\n try {\n const sourceItems = props.itemsSource();\n\n if (Array.isArray(sourceItems) && sourceItems.length > 0) {\n availableItemsArray.push(...sourceItems);\n }\n } catch (error) {\n console.error('Error getting items from itemsSource:', error);\n }\n }\n\n // Make the array available to the component\n const availableItems = availableItemsArray;\n\n // Get accessibility labels with defaults\n const ariaLabels = {\n addButton: props.ariaLabels?.addButton || 'Add item',\n removeButton: props.ariaLabels?.removeButton || 'Remove item',\n moveUpButton: props.ariaLabels?.moveUpButton || 'Move item up',\n moveDownButton: props.ariaLabels?.moveDownButton || 'Move item down',\n item: props.ariaLabels?.item || 'Item',\n };\n\n // Check if add button should be disabled\n const isAddButtonDisabled = !!(\n props.disabled ||\n props.readonly ||\n (maxItems !== undefined && arrayValue.length >= maxItems)\n );\n\n // Check if remove button should be disabled\n const isRemoveButtonDisabled = (_index: number) => {\n return !!(props.disabled || props.readonly || (minItems !== undefined && arrayValue.length <= minItems));\n };\n\n // Render the available items section if availableItems is provided\n const renderAvailableItems = () => {\n if (!availableItems || availableItems.length === 0) {\n return null;\n }\n\n return (\n <div class=\"mt-4\">\n <h3 class=\"font-semibold mb-2\">Available Items</h3>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2\">\n {availableItems.map((item, index) => (\n <div\n key={index}\n class=\"flex items-center justify-between p-3 border rounded-lg bg-base-100 hover:bg-base-200\"\n >\n <div class=\"flex-1\">\n {/* Use the slot function if provided */}\n {slots.availableItemRenderer?.({ item, index }) ||\n (props.availableItemRenderer ? props.availableItemRenderer(item, index) : JSON.stringify(item))}\n </div>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary ml-2\"\n onClick={() => addItem(item)}\n disabled={isAddButtonDisabled}\n aria-label={ariaLabels.addButton}\n data-testid={`${formState.storeName}-array-field-${String(props.name)}-add-available-${index}`}\n >\n Add\n </button>\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n // Render the selected items section\n const renderSelectedItems = () => {\n if (arrayValue.length === 0) {\n return null;\n }\n\n return (\n <div class=\"mt-4\">\n <h4 class=\"font-medium mb-2\">Selected Items:</h4>\n <div class=\"space-y-2\">\n {arrayValue.map((item: ItemType, index: number) => (\n <div\n key={index}\n class=\"flex items-center justify-between p-3 border rounded-lg bg-base-100 hover:bg-base-200\"\n >\n <div class=\"flex-1\">\n {/* Use the slot function if provided */}\n {slots.itemRenderer?.({\n item,\n index,\n getFieldName: (fieldPath: string) => getFieldName(fieldPath, index),\n }) || (props.itemRenderer ? props.itemRenderer(item, index) : JSON.stringify(item))}\n </div>\n <div class=\"flex items-center space-x-1 ml-2\">\n {props.allowReordering && (\n <div class=\"flex space-x-1\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost btn-square\"\n onClick={() => moveItemUp(index)}\n disabled={index === 0 || props.disabled || props.readonly}\n aria-label={ariaLabels.moveUpButton}\n data-testid={`${formState.storeName}-array-field-${String(props.name)}-move-up-${index}`}\n >\n ↑\n </button>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost btn-square\"\n onClick={() => moveItemDown(index)}\n disabled={index === arrayValue.length - 1 || props.disabled || props.readonly}\n aria-label={ariaLabels.moveDownButton}\n data-testid={`${formState.storeName}-array-field-${String(props.name)}-move-down-${index}`}\n >\n ↓\n </button>\n </div>\n )}\n <button\n type=\"button\"\n class=\"btn btn-sm btn-error\"\n onClick={() => removeItem(index)}\n disabled={isRemoveButtonDisabled(index)}\n aria-label={ariaLabels.removeButton}\n data-testid={`${formState.storeName}-array-field-${String(props.name)}-remove-${index}`}\n >\n Remove\n </button>\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n // Render the complete field structure\n return (\n <div class={`form-control ${props.class || ''}`}>\n {!props.hideLabel && (\n <label class=\"label\">\n <span class=\"label-text\">\n {props.label || fieldMetadata?.label}\n {fieldMetadata?.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n </label>\n )}\n\n {/* Custom content slot */}\n {slots.default?.()}\n\n {/* Available items section */}\n {renderAvailableItems()}\n\n {/* Selected items section */}\n {renderSelectedItems()}\n\n {/* Add new item button (if createItem is provided) */}\n {props.createItem && (\n <div class=\"mt-4\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-outline btn-primary\"\n onClick={() => addItem(createNewItem())}\n disabled={isAddButtonDisabled}\n aria-label={ariaLabels.addButton}\n data-testid={`${formState.storeName}-array-field-${String(props.name)}-add-button`}\n >\n Add New Item\n </button>\n </div>\n )}\n\n {props.description && <p class=\"text-sm mt-1\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error mt-1\">{formState.getError(props.name)}</p>}\n </div>\n );\n };\n\n // Define props\n DaisyUIArrayField.props = [\n 'name',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'disabled',\n 'readonly',\n 'class',\n 'availableItems',\n 'itemRenderer',\n 'availableItemRenderer',\n 'createItem',\n 'onAddItem',\n 'onRemoveItem',\n 'onUpdateItem',\n 'onSwapItems',\n 'minItems',\n 'maxItems',\n 'allowReordering',\n 'autoPrefixFields',\n 'ariaLabels',\n ];\n\n return DaisyUIArrayField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport { ZINIA_FORM_KEY, type ZiniaForm } from '../../useForm';\nimport type { CheckboxFieldProps } from '../types/CheckboxFieldProps';\n\n// DaisyUI styled checkbox field component\nexport function createDaisyUICheckboxField<FormType>() {\n const DaisyUICheckboxField: FunctionalComponent<CheckboxFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('CheckboxField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'checkbox',\n checked: Boolean(formState.getValue(props.name)),\n onChange: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.checked);\n formState.validateField(props.name);\n formState.touchField(props.name);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'checkbox',\n props.size ? `checkbox-${props.size}` : '',\n props.variant ? `checkbox-${props.variant}` : '',\n isTouched && !hasErrors ? 'checkbox-success' : '',\n isTouched && hasErrors ? 'checkbox-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure with label to the right of the checkbox\n return (\n <div class=\"form-control\">\n <label class=\"label cursor-pointer justify-start gap-2\">\n <input class={inputClass} disabled={props.disabled} readonly={props.readonly} data-testid={`${formState.storeName}-checkbox-field-${String(props.name)}`} {...inputProps} />\n {!props.hideLabel && (\n <span class=\"label-text\">\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n </label>\n\n {props.description && <p class=\"text-sm mt-1\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-sm text-error mt-1\">{formState.getError(props.name)}</p>}\n </div>\n );\n };\n\n // Define props\n DaisyUICheckboxField.props = [\n 'name',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return DaisyUICheckboxField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { NumberFieldProps } from '../types/NumberFieldProps';\n\n// DaisyUI styled number field component\nexport function createDaisyUICurrencyField<FormType>() {\n const DaisyUICurrencyField: FunctionalComponent<NumberFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('NumberField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'number',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n const value = target.value;\n \n // Handle empty input\n if (value === '') {\n formState.setValue(props.name, '');\n return;\n }\n \n // Remove leading zeros but preserve single '0'\n const cleanedValue = value.replace(/^0+/, '') || '0';\n formState.setValue(props.name, cleanedValue);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n min={fieldMetadata.min}\n max={fieldMetadata.max}\n step={props.step}\n data-testid={`${formState.storeName}-currency-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUICurrencyField.props = [\n 'name',\n 'placeholder',\n 'min',\n 'max',\n 'step',\n 'disabled',\n 'readonly',\n 'class',\n 'legend',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return DaisyUICurrencyField;\n}\n","// Helper function to format date values for the input\nexport function formatDateValue(value: any): string {\n if (!value) return '';\n\n // If it's already a string in YYYY-MM-DD format, return it\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n return value;\n }\n\n // If it's a Date object, format it as YYYY-MM-DD\n if (value instanceof Date) {\n return value.toISOString().split('T')[0];\n }\n\n // Try to convert to a Date and format\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n return date.toISOString().split('T')[0];\n }\n } catch (e) {\n // Ignore parsing errors\n }\n\n return '';\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { DateFieldProps } from '../types/DateFieldProps';\nimport { formatDateValue } from '../utils/formatDateValue';\n\n// DaisyUI styled date field component\nexport function createDaisyUIDateField<FormType>() {\n const DaisyUIDateField: FunctionalComponent<DateFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('DateField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'date',\n value: formatDateValue(formState.getValue(props.name)),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // if there is a formatter, use it\n if (props.formatter) {\n formState.setValue(props.name, props.formatter(target.value));\n } else {\n const dateValue = target.value ? new Date(target.value) : null;\n formState.setValue(props.name, dateValue);\n }\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n min={props.min}\n max={props.max}\n data-testid={`${formState.storeName}-date-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUIDateField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'min',\n 'max',\n ];\n\n return DaisyUIDateField;\n}\n","// Helper function to format datetime values for the input\nexport function formatDateTimeValue(value: any): string {\n if (!value) return '';\n\n // If it's already a string in the correct format, return it\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$/.test(value)) {\n return value;\n }\n\n // If it's a Date object, format it as YYYY-MM-DDThh:mm\n if (value instanceof Date && !isNaN(value.getTime())) {\n return `${value.getFullYear()}-${String(value.getMonth() + 1).padStart(2, '0')}-${String(value.getDate()).padStart(2, '0')}T${String(value.getHours()).padStart(2, '0')}:${String(value.getMinutes()).padStart(2, '0')}`;\n }\n\n // Try to convert to a Date and format\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}T${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;\n }\n } catch (e) {\n // Ignore parsing errors\n }\n\n return '';\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { DateTimeLocalFieldProps } from '../types/DateTimeLocalFieldProps';\nimport { formatDateTimeValue } from '../utils/formatDateTimeValue';\n\n// DaisyUI styled datetime-local field component\nexport function createDaisyUIDateTimeLocalField<FormType>() {\n const DaisyUIDateTimeLocalField: FunctionalComponent<DateTimeLocalFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('DateTimeLocalField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'datetime-local',\n value: formatDateTimeValue(formState.getValue(props.name)),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // Convert the string value to a Date object if it's not empty\n const dateTimeValue = target.value ? new Date(target.value) : null;\n formState.setValue(props.name, dateTimeValue);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n min: props.min,\n max: props.max,\n step: props.step,\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-datetime-local-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUIDateTimeLocalField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'min',\n 'max',\n 'step',\n ];\n\n return DaisyUIDateTimeLocalField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { EmailFieldProps } from '../types/EmailFieldProps';\n\n// DaisyUI styled email field component\nexport function createDaisyUIEmailField<FormType>() {\n const DaisyUIEmailField: FunctionalComponent<EmailFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('EmailField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'email',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n // Use metadata autocomplete value if available, otherwise use props.autocomplete or default\n autocomplete: fieldMetadata?.autocomplete || props.autocomplete || 'email',\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-email-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUIEmailField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return DaisyUIEmailField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { FileFieldProps } from '../types/FileFieldProps';\n\n// DaisyUI styled file field component\nexport function createDaisyUIFileField<FormType>() {\n const DaisyUIFileField: FunctionalComponent<FileFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('FileField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'file',\n onChange: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // Store FileList in form state\n formState.setValue(props.name, target.files);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n accept: props.accept,\n multiple: props.multiple,\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'file-input',\n props.size ? `file-input-${props.size}` : '',\n props.variant ? `file-input-${props.variant}` : '',\n isTouched && !hasErrors ? 'file-input-success' : '',\n isTouched && hasErrors ? 'file-input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <div class=\"form-control\">\n {!props.hideLabel && (\n <label class=\"label\">\n <span class=\"label-text\">\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n </label>\n )}\n\n <input class={inputClass} disabled={props.disabled} readonly={props.readonly} data-testid={`${formState.storeName}-file-field-${String(props.name)}`} {...inputProps} />\n\n {props.description && <p class=\"text-sm mt-1\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-sm text-error mt-1\">{formState.getError(props.name)}</p>}\n </div>\n );\n };\n\n // Define props\n DaisyUIFileField.props = [\n 'name',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'accept',\n 'multiple',\n ];\n\n return DaisyUIFileField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { FormProps } from '../types/FormProps';\n\n// DaisyUI styled form component\nexport function createDaisyUIForm<FormType>() {\n const DaisyUIForm: FunctionalComponent<FormProps<FormType>> = (props, { slots }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('Form: formState is required but was not injected');\n return null;\n }\n\n // Handle form submission\n const handleSubmit = async (event: Event) => {\n event.preventDefault();\n\n // Increment submission attempts count\n formState.incrementSubmitAttempts();\n\n props.onBeforeValidate?.();\n\n // Validate all fields (marks all fields as touched and validates them)\n if (!formState.validate()) {\n return;\n }\n\n // Set submitting state\n formState.setSubmitting(true);\n\n try {\n let result;\n\n // Use custom submit handler if provided, otherwise just return the form data\n if (props.onHandleSubmit) {\n result = await props.onHandleSubmit(formState.values as FormType);\n } else {\n result = formState.values;\n }\n\n // Call onSuccess hook if provided\n if (props.onSuccess) {\n props.onSuccess(result);\n }\n\n return result;\n } catch (error) {\n // Call onError hook if provided\n if (props.onError) {\n props.onError(error);\n }\n console.error('Form submission error:', error);\n } finally {\n formState.setSubmitting(false);\n }\n };\n\n // Compute form classes\n const formClass = ['space-y-8', props.className].filter(Boolean).join(' ');\n\n // Render the form\n return (\n <div class=\"p-0 md:p-4 max-w-4xl mx-auto bg-base-200\">\n {props.title && <h1 class=\"text-3xl font-bold mb-2 text-center\">{props.title}</h1>}\n {props.subtitle && <p class=\"text-center mb-2 text-neutral-content\">{props.subtitle}</p>}\n <form onSubmit={handleSubmit} novalidate class={formClass}>\n {/* Form content from slots */}\n {slots.default && slots.default()}\n </form>\n </div>\n );\n };\n\n return DaisyUIForm;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\n\n/**\n * Props for the FormErrorsSummary component\n */\nexport interface FormErrorsSummaryProps {\n /**\n * Custom title for the errors section\n */\n title?: string;\n\n /**\n * Whether to show the component only after form submission has been attempted\n * @default true\n */\n showOnlyAfterSubmitAttempt?: boolean;\n\n /**\n * Custom CSS class for the container\n */\n className?: string;\n\n /**\n * Icon to display next to the title\n * @default 'exclamation-circle'\n */\n icon?: string;\n}\n\n/**\n * Create a DaisyUI styled form errors summary component\n */\nexport function createDaisyUIFormErrorsSummary() {\n const DaisyUIFormErrorsSummary: FunctionalComponent<FormErrorsSummaryProps> = (props) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('FormErrorsSummary: formState is required but was not injected');\n return null;\n }\n\n // Check if we should show the errors\n const shouldShow = () => {\n // If showOnlyAfterSubmitAttempt is true (default), only show after submit attempt\n if (props.showOnlyAfterSubmitAttempt !== false && !formState.hasAttemptedSubmit) {\n return false;\n }\n\n // Only show if there are errors\n return Object.keys(formState.errors).length > 0;\n };\n \n // Function to scroll to a field when its name is clicked\n const scrollToField = (fieldPath: string, fieldId: string) => {\n // Try to find element by ID first (most reliable if IDs are set)\n let fieldElement = document.getElementById(fieldId);\n \n // If not found by ID, try to find by name attribute\n if (!fieldElement) {\n fieldElement = document.querySelector(`[name=\"${fieldPath}\"]`);\n }\n \n // If still not found, try to find by data-field-path attribute (if your fields have this)\n if (!fieldElement) {\n fieldElement = document.querySelector(`[data-field-path=\"${fieldPath}\"]`);\n }\n \n // If we found the element, scroll to it and focus it\n if (fieldElement) {\n // Scroll the element into view with smooth behavior\n fieldElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n \n // Try to focus the element if it's an input\n try {\n (fieldElement as HTMLInputElement).focus();\n } catch (e) {\n // Silently fail if we can't focus\n }\n } else {\n console.warn(`Could not find field element for: ${fieldPath}`);\n }\n };\n\n // Get all error messages\n const errorMessages = () => {\n return Object.entries(formState.errors).map(([field, message]) => ({\n field,\n message,\n id: `field-${field.replace(/\\./g, '-')}`, // Create an ID for scrolling\n }));\n };\n\n // Compute container classes - using a more subtle style with semantic colors\n const containerClass = ['border', 'border-error', 'rounded-lg', 'p-4', 'mb-4', 'bg-base-100', props.className]\n .filter(Boolean)\n .join(' ');\n\n // Render the component\n return (\n <div class={containerClass} style={{ display: shouldShow() ? 'block' : 'none' }} data-testid=\"form-errors-summary\">\n <div class=\"flex items-start\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"text-error flex-shrink-0 h-5 w-5 mr-2 mt-0.5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n <div class=\"flex-1\">\n <h3 class=\"text-error font-medium text-sm\">{props.title || 'Please fix the following errors:'}</h3>\n <ul class=\"mt-1 text-sm text-base-content space-y-1\">\n {errorMessages().map((error) => (\n <li key={error.field} class=\"flex items-start mb-2\">\n <span \n class=\"text-error font-semibold mr-2 min-w-[120px] cursor-pointer flex items-center\"\n onClick={() => scrollToField(error.field, error.id)}\n role=\"button\"\n tabindex=\"0\"\n title={`Click to scroll to ${error.field} field`}\n >\n <svg \n xmlns=\"http://www.w3.org/2000/svg\" \n class=\"h-4 w-4 mr-1 inline-block\" \n fill=\"none\" \n viewBox=\"0 0 24 24\" \n stroke=\"currentColor\"\n >\n <path \n stroke-linecap=\"round\" \n stroke-linejoin=\"round\" \n stroke-width=\"2\" \n d=\"M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122\"\n />\n </svg>\n <span class=\"underline hover:no-underline\">{error.field}</span>\n </span>\n <span class=\"text-base-content\">{error.message}</span>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n );\n };\n\n // Define props\n DaisyUIFormErrorsSummary.props = [\n 'title',\n 'showOnlyAfterSubmitAttempt',\n 'className',\n 'icon',\n ];\n\n return DaisyUIFormErrorsSummary;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { NumberFieldProps } from '../types/NumberFieldProps';\n\n// DaisyUI styled number field component\nexport function createDaisyUINumberField<FormType>() {\n const DaisyUINumberField: FunctionalComponent<NumberFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('NumberField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'number',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // Convert the string value to a number\n // remove leading zeros\n const numValue = target.value === '' ? null : Number(target.value.replace(/^0+/, ''));\n formState.setValue(props.name, numValue);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n min={fieldMetadata.min}\n max={fieldMetadata.max}\n step={props.step}\n data-testid={`${formState.storeName}-number-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUINumberField.props = [\n 'name',\n 'placeholder',\n 'min',\n 'max',\n 'step',\n 'disabled',\n 'readonly',\n 'class',\n 'legend',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return DaisyUINumberField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { PasswordFieldProps } from '../types/PasswordFieldProps';\n\n// DaisyUI styled password field component\nexport function createDaisyUIPasswordField<FormType>() {\n const DaisyUIPasswordField: FunctionalComponent<PasswordFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('PasswordField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'password',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n // Use metadata autocomplete value if available, otherwise use props.autocomplete or default\n autocomplete: fieldMetadata?.autocomplete || props.autocomplete || 'current-password',\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-password-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUIPasswordField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return DaisyUIPasswordField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { RadioFieldProps } from '../types/RadioFieldProps';\n\n// DaisyUI styled radio field component with fieldset presentation\nexport function createDaisyUIRadioField<FormType>() {\n const DaisyUIRadioField: FunctionalComponent<RadioFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('RadioField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n const options = props.options || fieldMetadata.options || [];\n const currentValue = formState.getValue(props.name);\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute radio classes\n const radioClass = [\n 'radio',\n props.size ? `radio-${props.size}` : '',\n props.variant ? `radio-${props.variant}` : '',\n isTouched && !hasErrors ? 'radio-success' : '',\n isTouched && hasErrors ? 'radio-error' : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n // Handle radio selection\n const handleChange = (value: any) => {\n formState.setValue(props.name, value);\n formState.touchField(props.name);\n formState.validateField(props.name);\n };\n\n const handleBlur = () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n };\n\n // Render the complete field structure with fieldset presentation\n return (\n <div class={`form-control ${props.class || ''}`}>\n <fieldset class=\"fieldset bg-base-100 border-base-300 rounded-box border p-4\">\n {!props.hideLabel && (\n <legend class=\"fieldset-legend px-2 font-medium\">\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </legend>\n )}\n\n <div class={`space-y-2 ${props.inline ? 'sm:grid sm:grid-cols-2 sm:gap-4 sm:space-y-0' : ''}`}>\n {options.map((option) => (\n <div key={option.value} class=\"radio-option\">\n <label\n class={`\n flex items-center cursor-pointer p-2 rounded-lg hover:bg-base-200 transition-colors\n ${currentValue === option.value ? 'bg-base-200' : ''}\n `}\n >\n <input\n type=\"radio\"\n class={radioClass}\n value={option.value}\n checked={currentValue === option.value}\n onChange={() => handleChange(option.value)}\n onBlur={handleBlur}\n disabled={props.disabled}\n readonly={props.readonly}\n name={props.name}\n data-testid={`${formState.storeName}-radio-field-${String(props.name)}-${option.value}`}\n {...attrs}\n />\n <span class=\"label-text ml-2\">{option.label}</span>\n </label>\n </div>\n ))}\n </div>\n\n {props.description && <p class=\"label mt-2 text-sm text-base-content/70\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-sm text-error mt-2\">{formState.getError(props.name)}</p>}\n </fieldset>\n </div>\n );\n };\n\n // Define props\n DaisyUIRadioField.props = [\n 'name',\n 'options',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'inline',\n ];\n\n return DaisyUIRadioField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { RangeFieldProps } from '../types/RangeFieldProps';\n\n// DaisyUI styled range field component\nexport function createDaisyUIRangeField<FormType>() {\n const DaisyUIRangeField: FunctionalComponent<RangeFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('RangeField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n const currentValue = formState.getValue(props.name);\n\n // Create the input props\n const inputProps = {\n type: 'range',\n value: currentValue,\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // Convert the string value to a number\n const numValue = target.value === '' ? null : Number(target.value);\n formState.setValue(props.name, numValue);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n min: props.min ?? fieldMetadata.min,\n max: props.max ?? fieldMetadata.max,\n step: props.step,\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'range',\n props.size ? `range-${props.size}` : '',\n props.variant ? `range-${props.variant}` : '',\n isTouched && !hasErrors ? 'range-success' : '',\n isTouched && hasErrors ? 'range-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <div class=\"form-control\">\n {!props.hideLabel && (\n <label class=\"label\">\n <span class=\"label-text\">\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n {props.showValue && <span class=\"label-text-alt\">{currentValue}</span>}\n </label>\n )}\n\n <input class={inputClass} disabled={props.disabled} readonly={props.readonly} data-testid={`${formState.storeName}-range-field-${String(props.name)}`} {...inputProps} />\n\n {props.description && <p class=\"text-sm mt-1\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-sm text-error mt-1\">{formState.getError(props.name)}</p>}\n </div>\n );\n };\n\n // Define props\n DaisyUIRangeField.props = [\n 'name',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'min',\n 'max',\n 'step',\n 'showValue',\n ];\n\n return DaisyUIRangeField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { ResetButtonProps } from '../types/ResetButtonProps';\n\n// DaisyUI styled reset button component\nexport function createDaisyUIResetButton<FormType>() {\n const DaisyUIResetButton: FunctionalComponent<ResetButtonProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('ResetButton: formState is required but was not injected');\n return null;\n }\n\n // Determine reset button text\n const resetText = props.resetText || 'Reset';\n\n // Compute button classes\n const buttonClass = ['btn btn-outline', props.className].filter(Boolean).join(' ');\n\n // Handle reset button click\n const handleReset = () => {\n // Reset the form to initial values\n formState.reset();\n\n // Call custom onReset handler if provided\n if (props.onReset) {\n props.onReset();\n }\n };\n\n return (\n <div class=\"form-control mt-2\">\n <button\n type=\"button\"\n class={buttonClass}\n disabled={formState.isSubmitting || props.disabled}\n onClick={handleReset}\n data-testid={`${formState.storeName}-reset-button`}\n {...attrs}\n >\n {resetText}\n </button>\n </div>\n );\n };\n\n return DaisyUIResetButton;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { SearchFieldProps } from '../types/SearchFieldProps';\n\n// DaisyUI styled search field component\nexport function createDaisyUISearchField<FormType>() {\n const DaisyUISearchField: FunctionalComponent<SearchFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('SearchField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'search',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n autocomplete: props.autocomplete,\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-search-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUISearchField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return DaisyUISearchField;\n}\n","import { z } from 'zod';\nimport { type FlexiblePath } from '../../utils/dynamicPaths';\nimport { type Path } from '../../utils/paths';\n\n/**\n * Option item for select fields\n */\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\n/**\n * Extract enum values from a Zod enum schema\n */\nexport type ZodEnumValues<T extends z.ZodEnum<[string, ...string[]]>> = T['_def']['values'][number];\n\n/**\n * Type for a mapping of enum values to labels\n */\nexport type EnumValueToLabelMap<T extends string> = Record<T, string>;\n\n/**\n * Type for a value-to-label mapping that can be either a function or an object map\n */\nexport type ValueToLabelMapping<T extends string = string> = ((value: string) => string) | EnumValueToLabelMap<T>;\n\n/**\n * Helper type to extract the type of a field at a given path\n */\nexport type FieldType<T, P extends string> = P extends keyof T\n ? T[P]\n : P extends `${infer A}.${infer B}`\n ? A extends keyof T\n ? FieldType<T[A], B>\n : never\n : never;\n\n/**\n * Helper type to extract enum values from a field type\n */\nexport type EnumValuesFromField<T> = T extends string ? T : never;\n\n/**\n * Type that maps field paths to their corresponding enum types\n */\nexport type FieldPathToEnum<T, P extends Path<T>> = EnumValuesFromField<FieldType<T, P & string>>;\n\n/**\n * Props for the SelectField component\n */\nexport interface SelectFieldProps<FormType, P extends Path<FormType> = Path<FormType>> {\n /**\n * Field name (path in the form state)\n * Accepts both static paths and dynamic paths for use in array fields\n */\n name: FlexiblePath<FormType>;\n\n /**\n * Field label\n */\n label?: string;\n\n /**\n * Whether to hide the label\n */\n hideLabel?: boolean;\n\n /**\n * Field description\n */\n description?: string;\n\n /**\n * Whether the field is required\n */\n required?: boolean;\n\n /**\n * Placeholder text\n */\n placeholder?: string;\n\n /**\n * Whether the field is disabled\n */\n disabled?: boolean;\n\n /**\n * Whether the field is readonly\n */\n readonly?: boolean;\n\n /**\n * CSS classes to apply to the field\n */\n class?: string | string[];\n\n /**\n * Field size\n */\n size?: string;\n\n /**\n * Field variant\n */\n variant?: string;\n\n /**\n * Select options (overrides options from schema)\n * Using selectOptions instead of options to avoid conflicts with HTML select element\n */\n selectOptions?: SelectOption[];\n\n /**\n * Custom mapping function to convert values to labels\n * This is useful when you want to customize how labels are displayed\n * without providing a full options array\n *\n * Can be provided as either:\n * 1. A function that takes a value and returns a label\n * 2. An object map where keys are enum values and values are labels\n */\n valueToLabel?: ValueToLabelMapping<FieldPathToEnum<FormType, P>>;\n\n /**\n * Whether to use options from the schema (default: true)\n * Set to false to ignore schema options even when no options prop is provided\n */\n useSchemaOptions?: boolean;\n}\n\n/**\n * Array of prop names for SelectField component.\n * This is derived from SelectFieldProps interface and ensures type safety.\n * Used for prop normalization and filtering in component implementations.\n *\n * TypeScript ensures all entries are valid keys of SelectFieldProps.\n */\nexport const SELECT_FIELD_PROP_NAMES = [\n 'name',\n 'selectOptions',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'valueToLabel',\n 'useSchemaOptions',\n] as const satisfies readonly (keyof SelectFieldProps<any, any>)[];\n","/**\n * Utility functions for prop normalization and filtering\n */\n\n/**\n * Converts a camelCase string to kebab-case\n */\nfunction camelToKebab(str: string): string {\n return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * Gets all prop name variants (camelCase and kebab-case) from a props definition\n */\nfunction getPropVariants(propsDefinition: string[] | Record<string, any>): Set<string> {\n const variants = new Set<string>();\n\n if (Array.isArray(propsDefinition)) {\n // If props are defined as an array, create variants for each\n propsDefinition.forEach((propName) => {\n variants.add(propName); // camelCase\n variants.add(camelToKebab(propName)); // kebab-case\n });\n } else {\n // If props are defined as an object, use the keys\n Object.keys(propsDefinition).forEach((propName) => {\n variants.add(propName); // camelCase\n variants.add(camelToKebab(propName)); // kebab-case\n });\n }\n\n return variants;\n}\n\n/**\n * Filters component props from attrs to prevent them from being rendered as DOM attributes.\n * This is necessary because Vue doesn't always normalize kebab-case props to camelCase in Functional Components,\n * causing component props to fall through to attrs.\n *\n * @param propsDefinition - The component's props definition (array or object)\n * @param attrs - The attrs object from the component context\n * @returns Filtered attrs with component props removed\n */\nexport function filterComponentPropsFromAttrs(\n propsDefinition: string[] | Record<string, any>,\n attrs: Record<string, any>,\n): Record<string, any> {\n const propVariants = getPropVariants(propsDefinition);\n const filtered: Record<string, any> = {};\n\n for (const key in attrs) {\n if (!propVariants.has(key)) {\n filtered[key] = attrs[key];\n }\n }\n\n return filtered;\n}\n\n/**\n * Normalizes props from attrs when they're passed as kebab-case but expected as camelCase.\n * Checks attrs for kebab-case variants of props that aren't already in props.\n *\n * @param props - The props object (may be missing kebab-case props)\n * @param propsDefinition - The component's props definition (array or object)\n * @param attrs - The attrs object from the component context\n * @returns Props object with normalized values from attrs\n */\nexport function normalizePropsFromAttrs<T extends Record<string, any>>(\n props: T,\n propsDefinition: string[] | Record<string, any>,\n attrs: Record<string, any>,\n): T {\n const propVariants = getPropVariants(propsDefinition);\n const normalized = { ...props } as T;\n\n // Check each prop variant in attrs and add it to props if missing\n for (const key in attrs) {\n if (propVariants.has(key)) {\n // Find the camelCase version of this prop\n const camelCaseKey = Array.isArray(propsDefinition)\n ? propsDefinition.find((p) => camelToKebab(p) === key) ||\n key.replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n : Object.keys(propsDefinition).find((p) => camelToKebab(p) === key) ||\n key.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n\n // Only use the attrs value if the prop doesn't already have a value\n if (!(camelCaseKey in normalized) || normalized[camelCaseKey] === undefined) {\n (normalized as any)[camelCaseKey] = attrs[key];\n }\n }\n }\n\n return normalized;\n}\n","import { computed, type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { SelectFieldProps } from '../types/SelectFieldProps';\nimport { SELECT_FIELD_PROP_NAMES } from '../types/SelectFieldProps';\nimport { filterComponentPropsFromAttrs, normalizePropsFromAttrs } from '../../utils/propNormalization';\n\n// DaisyUI styled select field component\nexport function createDaisyUISelectField<FormType>() {\n // Use props array derived from SelectFieldProps interface - ensures type safety and single source of truth\n const propsDefinition = [...SELECT_FIELD_PROP_NAMES] as string[];\n\n const DaisyUISelectField: FunctionalComponent<SelectFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('SelectField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Normalize props from attrs (handles kebab-case -> camelCase conversion)\n const normalizedProps = normalizePropsFromAttrs(props, propsDefinition, attrs);\n\n // Determine which options to use\n const getOptions = computed(() => {\n // If explicit options are provided, use them\n if (normalizedProps.selectOptions) {\n return normalizedProps.selectOptions;\n }\n\n // If useSchemaOptions is explicitly set to false, return empty array\n if (normalizedProps.useSchemaOptions === false) {\n return [];\n }\n\n // Use options from schema metadata if available\n const schemaOptions = fieldMetadata?.options || [];\n\n // Apply custom value-to-label mapping if provided\n if (normalizedProps.valueToLabel && schemaOptions.length > 0) {\n const valueToLabel = normalizedProps.valueToLabel; // Store in a constant to avoid TS errors\n return schemaOptions.map((option) => ({\n value: option.value,\n label:\n typeof valueToLabel === 'function'\n ? valueToLabel(option.value)\n : (valueToLabel as Record<string, string>)[option.value] || option.value,\n }));\n }\n\n return schemaOptions;\n });\n\n // Filter out component props from attrs to prevent them from being rendered as DOM attributes\n const htmlAttrs = filterComponentPropsFromAttrs(propsDefinition, attrs);\n\n // Create the select props\n const selectProps = {\n value: formState.getValue(props.name),\n onChange: (event: Event) => {\n const target = event.target as HTMLSelectElement;\n formState.setValue(props.name, target.value);\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n name: props.name,\n ...htmlAttrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute select classes\n const selectClass = [\n 'select',\n props.size ? `select-${props.size}` : '',\n props.variant ? `select-${props.variant}` : '',\n isTouched && !hasErrors ? 'select-success' : '',\n isTouched && hasErrors ? 'select-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <select class={selectClass} disabled={props.disabled} data-testid={`${formState.storeName}-select-field-${String(props.name)}`} {...selectProps}>\n {props.placeholder && (\n <option value=\"\" disabled selected>\n {props.placeholder}\n </option>\n )}\n {getOptions.value.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Assign props definition to component\n DaisyUISelectField.props = propsDefinition;\n\n return DaisyUISelectField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { SubmitButtonProps } from '../types/SubmitButtonProps';\n\n// DaisyUI styled submit button component\nexport function createDaisyUISubmitButton<FormType>() {\n const DaisyUISubmitButton: FunctionalComponent<SubmitButtonProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('SubmitButton: formState is required but was not injected');\n return null;\n }\n\n // Determine submit button text\n const submitText = props.submitText || 'Submit';\n const submittingText = props.submittingText || 'Submitting...';\n\n // Compute button classes\n const buttonClass = ['btn btn-primary', props.className].filter(Boolean).join(' ');\n\n // Only disable the button if validation has been attempted and failed\n // or if the form is currently submitting\n const shouldDisable =\n (formState.hasAttemptedSubmit && !formState.isValid) || formState.isSubmitting || props.disabled;\n\n return (\n <button type=\"submit\" class={buttonClass} disabled={shouldDisable} data-testid={`${formState.storeName}-submit-button`} {...attrs}>\n {formState.isSubmitting ? submittingText : submitText}\n </button>\n );\n };\n\n return DaisyUISubmitButton;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { TelFieldProps } from '../types/TelFieldProps';\n\n// DaisyUI styled tel field component\nexport function createDaisyUITelField<FormType>() {\n const DaisyUITelField: FunctionalComponent<TelFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('TelField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'tel',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n autocomplete: props.autocomplete || 'tel',\n pattern: props.pattern || fieldMetadata.pattern?.toString().slice(1, -1), // Convert RegExp to string pattern\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-tel-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUITelField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'pattern',\n ];\n\n return DaisyUITelField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { TextareaFieldProps } from '../types/TextareaFieldProps';\n\n// DaisyUI styled textarea field component\nexport function createDaisyUITextareaField<FormType>() {\n const DaisyUITextareaField: FunctionalComponent<TextareaFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('TextareaField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the textarea props\n const textareaProps = {\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLTextAreaElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute textarea classes\n const textareaClass = [\n 'textarea',\n props.size ? `textarea-${props.size}` : '',\n props.variant ? `textarea-${props.variant}` : '',\n isTouched && !hasErrors ? 'textarea-success' : '',\n isTouched && hasErrors ? 'textarea-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <textarea\n class={textareaClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n rows={props.rows || 3}\n data-testid={`${formState.storeName}-textarea-field-${String(props.name)}`}\n {...textareaProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUITextareaField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'rows',\n ];\n\n return DaisyUITextareaField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { TextFieldProps } from '../types/TextFieldProps';\n\n// DaisyUI styled text field component\nexport function createDaisyUITextField<FormType>() {\n const DaisyUITextField: FunctionalComponent<TextFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('TextField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'text',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n // Use metadata autocomplete value if available, otherwise use props.autocomplete\n autocomplete: fieldMetadata?.autocomplete || props.autocomplete,\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-text-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUITextField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return DaisyUITextField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { TimeFieldProps } from '../types/TimeFieldProps';\n\n// DaisyUI styled time field component\nexport function createDaisyUITimeField<FormType>() {\n const DaisyUITimeField: FunctionalComponent<TimeFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('TimeField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'time',\n value: formatTimeValue(formState.getValue(props.name)),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n min: props.min,\n max: props.max,\n step: props.step,\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-time-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUITimeField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'min',\n 'max',\n 'step',\n ];\n\n return DaisyUITimeField;\n}\n\n// Helper function to format time values for the input\nfunction formatTimeValue(value: any): string {\n if (!value) return '';\n\n // If it's already a string in HH:MM format, return it\n if (typeof value === 'string' && /^\\d{2}:\\d{2}(:\\d{2})?$/.test(value)) {\n return value;\n }\n\n // If it's a Date object, format it as HH:MM\n if (value instanceof Date) {\n return `${String(value.getHours()).padStart(2, '0')}:${String(value.getMinutes()).padStart(2, '0')}`;\n }\n\n // Try to convert to a Date and format\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n return `${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;\n }\n } catch (e) {\n // Ignore parsing errors\n }\n\n return value;\n}\n","import { computed, type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { ToppingsFieldProps } from '../types/ToppingsFieldProps';\n\n// Define the slots interface for proper typing\ninterface ToppingsFieldSlots<ToppingType> {\n itemRenderer: (props: { \n item: ToppingType; \n index: number; \n getFieldName: (fieldPath: string) => string;\n }) => any;\n availableItemRenderer: (props: { \n item: ToppingType; \n index: number;\n }) => any;\n toppingRenderer: (props: {\n topping: ToppingType;\n isSelected: boolean;\n placement: string;\n isExtra: boolean;\n }) => any;\n default: () => any;\n}\n\n/**\n * Create a DaisyUI-styled toppings field component\n */\nexport function createDaisyUIToppingsField<FormType, ToppingType = any>() {\n const DaisyUIToppingsField: FunctionalComponent<\n ToppingsFieldProps<FormType, ToppingType>,\n {}, // Emits (empty object)\n ToppingsFieldSlots<ToppingType> // Slots interface\n > = (props, { slots }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('ToppingsField: formState is required but was not injected');\n return null;\n }\n\n // Get field metadata\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Extract min/max constraints from the schema metadata\n const _minToppings = props.required ? 1 : 0;\n const maxToppings = props.maxToppings !== undefined ? props.maxToppings : fieldMetadata?.max;\n\n // Get the current value from the form state\n const value = computed(() => {\n return formState.getValue(props.name) || [];\n });\n\n // Helper to get topping name\n const getToppingName = (topping: ToppingType): string => {\n if (props.getToppingName) {\n return props.getToppingName(topping);\n }\n\n // Default implementation - try to access 'name' property\n return (topping as any).name || 'Unknown';\n };\n\n // Helper to get topping price\n const getToppingPrice = (topping: ToppingType): number => {\n if (props.getToppingPrice) {\n return props.getToppingPrice(topping);\n }\n\n // Default implementation - try to access 'price' property\n return (topping as any).price || 0;\n };\n\n // Helper to get placement\n const getToppingPlacement = (topping: ToppingType): string => {\n if (props.getToppingPlacement) {\n return props.getToppingPlacement(topping);\n }\n\n // Default implementation - try to access 'placement' property\n return (topping as any).placement || 'whole';\n };\n\n // Helper to set placement\n const setToppingPlacement = (topping: ToppingType, placement: string) => {\n if (props.setToppingPlacement) {\n props.setToppingPlacement(topping, placement);\n return;\n }\n\n // Default implementation - try to set 'placement' property\n if ((topping as any).placement !== undefined) {\n (topping as any).placement = placement;\n }\n };\n\n // Helper to check if a topping has extra amount\n const getIsExtraTopping = (topping: ToppingType): boolean => {\n if (props.getIsExtraTopping) {\n return props.getIsExtraTopping(topping);\n }\n\n // Default implementation - try to access 'isExtra' property\n return (topping as any).isExtra || false;\n };\n\n // Helper to toggle extra amount\n const toggleExtraTopping = (topping: ToppingType, isExtra: boolean) => {\n if (props.toggleExtraTopping) {\n props.toggleExtraTopping(topping, isExtra);\n return;\n }\n\n // Default implementation - try to set 'isExtra' property\n if ((topping as any).isExtra !== undefined) {\n (topping as any).isExtra = isExtra;\n }\n };\n\n // Check if a topping is selected\n const isToppingSelected = (topping: ToppingType): boolean => {\n const toppingName = getToppingName(topping);\n return value.value.some((t: ToppingType) => getToppingName(t) === toppingName);\n };\n\n // Get the selected topping object\n const getSelectedTopping = (topping: ToppingType): ToppingType | undefined => {\n const toppingName = getToppingName(topping);\n return value.value.find((t: ToppingType) => getToppingName(t) === toppingName);\n };\n\n // Toggle a topping selection\n const toggleTopping = (topping: ToppingType) => {\n if (props.disabled || props.readonly) {\n return;\n }\n\n const toppingName = getToppingName(topping);\n const currentValue = [...value.value];\n const existingIndex = currentValue.findIndex((t: ToppingType) => getToppingName(t) === toppingName);\n\n if (existingIndex >= 0) {\n // Remove the topping\n currentValue.splice(existingIndex, 1);\n } else {\n // Add the topping if we haven't reached the maximum\n if (maxToppings && currentValue.length >= maxToppings) {\n return;\n }\n\n // Create a copy of the topping to add\n const newTopping = { ...topping };\n currentValue.push(newTopping);\n }\n\n // Update the form state\n formState.setValue(props.name, currentValue);\n formState.validateField(props.name);\n };\n\n // Update the placement for a topping\n const updateToppingPlacement = (topping: ToppingType, placement: string) => {\n if (props.disabled || props.readonly) {\n return;\n }\n\n const toppingName = getToppingName(topping);\n const currentValue = [...value.value];\n const existingIndex = currentValue.findIndex((t: ToppingType) => getToppingName(t) === toppingName);\n\n if (existingIndex >= 0) {\n // Update the placement\n setToppingPlacement(currentValue[existingIndex], placement);\n\n // Update the form state\n formState.setValue(props.name, currentValue);\n formState.validateField(props.name);\n }\n };\n\n // Toggle the extra amount for a topping\n const updateExtraTopping = (topping: ToppingType, isExtra: boolean) => {\n if (props.disabled || props.readonly) {\n return;\n }\n\n const toppingName = getToppingName(topping);\n const currentValue = [...value.value];\n const existingIndex = currentValue.findIndex((t: ToppingType) => getToppingName(t) === toppingName);\n\n if (existingIndex >= 0) {\n // Toggle the extra amount\n toggleExtraTopping(currentValue[existingIndex], isExtra);\n\n // Update the form state\n formState.setValue(props.name, currentValue);\n formState.validateField(props.name);\n }\n };\n\n // Get accessibility labels with defaults\n const ariaLabels = {\n toppingsList: props.ariaLabels?.toppingsList || 'Available toppings',\n addTopping: props.ariaLabels?.addTopping || 'Add topping',\n removeTopping: props.ariaLabels?.removeTopping || 'Remove topping',\n leftSide: props.ariaLabels?.leftSide || 'Left side only',\n wholePizza: props.ariaLabels?.wholePizza || 'Whole pizza',\n rightSide: props.ariaLabels?.rightSide || 'Right side only',\n extraTopping: props.ariaLabels?.extraTopping || 'Extra topping',\n ...props.ariaLabels,\n };\n\n return (\n <div class={`form-control w-full ${hasErrors && isTouched ? 'error' : ''}`}>\n {props.label && (\n <label class=\"label\">\n <span class=\"label-text\">\n {props.label}\n {props.required && <span class=\"text-error\"> *</span>}\n </span>\n </label>\n )}\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\" aria-label={ariaLabels.toppingsList}>\n {props.allAvailableToppings.map((topping: ToppingType) => {\n const isSelected = isToppingSelected(topping);\n const selectedTopping = isSelected ? getSelectedTopping(topping) : undefined;\n const placement = selectedTopping ? getToppingPlacement(selectedTopping) : 'whole';\n const isExtra = selectedTopping ? getIsExtraTopping(selectedTopping) : false;\n const toppingName = getToppingName(topping);\n const toppingPrice = getToppingPrice(topping);\n\n return (\n <div key={toppingName} class=\"bg-base-100 border rounded-lg p-3 hover:bg-base-200\">\n <div class=\"flex items-center mb-2\">\n <input\n type=\"checkbox\"\n class=\"checkbox checkbox-primary mr-2\"\n checked={isSelected}\n onChange={() => toggleTopping(topping)}\n disabled={\n !!(\n props.disabled ||\n props.readonly ||\n (!isSelected && props.maxToppings && value.value.length >= props.maxToppings)\n )\n }\n name={`${props.name}-${toppingName}`}\n aria-label={isSelected ? ariaLabels.removeTopping : ariaLabels.addTopping}\n data-testid={`${formState.storeName}-toppings-field-${String(props.name)}-${toppingName}`}\n />\n\n {/* Use the slot function if provided */}\n {slots.toppingRenderer ? (\n slots.toppingRenderer({\n topping,\n isSelected,\n placement,\n isExtra,\n })\n ) : props.toppingRenderer ? (\n props.toppingRenderer(topping, isSelected, placement, isExtra)\n ) : (\n <div>\n <span class=\"font-medium\">{toppingName}</span>\n <span class=\"text-sm ml-1\">(+${toppingPrice.toFixed(2)})</span>\n </div>\n )}\n </div>\n\n {isSelected && (\n <div class=\"flex flex-col space-y-2 mt-2 pl-6\">\n {/* Placement radio buttons */}\n <div class=\"flex items-center\">\n <span class=\"text-sm mr-2\">Placement:</span>\n <div class=\"join\">\n <input\n type=\"radio\"\n name={`${props.name}-placement-${toppingName}`}\n class=\"join-item radio radio-sm radio-primary\"\n checked={placement === 'left'}\n onChange={() => updateToppingPlacement(selectedTopping!, 'left')}\n disabled={!!(props.disabled || props.readonly)}\n aria-label={ariaLabels.leftSide}\n data-testid={`${formState.storeName}-toppings-field-${String(props.name)}-${toppingName}-placement-left`}\n />\n <span class=\"join-item px-2 py-1 border-y flex items-center justify-center text-xs\">Left</span>\n\n <input\n type=\"radio\"\n name={`${props.name}-placement-${toppingName}`}\n class=\"join-item radio radio-sm radio-primary\"\n checked={placement === 'whole'}\n onChange={() => updateToppingPlacement(selectedTopping!, 'whole')}\n disabled={!!(props.disabled || props.readonly)}\n aria-label={ariaLabels.wholePizza}\n data-testid={`${formState.storeName}-toppings-field-${String(props.name)}-${toppingName}-placement-whole`}\n />\n <span class=\"join-item px-2 py-1 border-y flex items-center justify-center text-xs\">Whole</span>\n\n <input\n type=\"radio\"\n name={`${props.name}-placement-${toppingName}`}\n class=\"join-item radio radio-sm radio-primary\"\n checked={placement === 'right'}\n onChange={() => updateToppingPlacement(selectedTopping!, 'right')}\n disabled={!!(props.disabled || props.readonly)}\n aria-label={ariaLabels.rightSide}\n data-testid={`${formState.storeName}-toppings-field-${String(props.name)}-${toppingName}-placement-right`}\n />\n <span class=\"join-item px-2 py-1 border-y flex items-center justify-center text-xs\">Right</span>\n </div>\n </div>\n\n {/* Extra toggle */}\n <div class=\"flex items-center\">\n <label class=\"cursor-pointer label justify-start\">\n <input\n type=\"checkbox\"\n class=\"toggle toggle-primary toggle-sm mr-2\"\n checked={isExtra}\n onChange={() => updateExtraTopping(selectedTopping!, !isExtra)}\n disabled={!!(props.disabled || props.readonly)}\n name={`${props.name}-extra-${toppingName}`}\n aria-label={ariaLabels.extraTopping}\n data-testid={`${formState.storeName}-toppings-field-${String(props.name)}-${toppingName}-extra`}\n />\n <span class=\"label-text text-sm\">Extra</span>\n {isExtra && <span class=\"text-sm ml-2\">(+${(toppingPrice * 0.5).toFixed(2)})</span>}\n </label>\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {hasErrors && isTouched && (\n <label class=\"label\">\n <span class=\"label-text-alt text-error\">{formState.getError(props.name)}</span>\n </label>\n )}\n\n {props.helpText && (\n <label class=\"label\">\n <span class=\"label-text-alt\">{props.helpText}</span>\n </label>\n )}\n\n {maxToppings && (\n <div class=\"text-sm text-gray-500 mt-1\">\n {value.value.length} of {maxToppings} toppings selected\n </div>\n )}\n </div>\n );\n };\n\n return DaisyUIToppingsField;\n}\n","import { computed, type FunctionalComponent, getCurrentInstance, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { TransferListFieldProps } from '../types/TransferListFieldProps';\n\n// Define the slots interface for proper typing\ninterface TransferListFieldSlots<ItemType> {\n itemRenderer: (props: { \n item: ItemType; \n index: number; \n getFieldName: (fieldPath: string) => string;\n }) => any;\n availableItemRenderer: (props: { \n item: ItemType; \n index: number;\n }) => any;\n selectedItemRenderer: (props: { \n item: ItemType; \n index: number;\n getFieldName: (fieldPath: string) => string;\n }) => any;\n default: () => any;\n}\n\n// DaisyUI styled transfer list field component\nexport function createDaisyUITransferListField<FormType, ItemType = any>() {\n const DaisyUITransferListField: FunctionalComponent<\n TransferListFieldProps<FormType, ItemType>,\n {}, // Emits (empty object)\n TransferListFieldSlots<ItemType> // Slots interface\n > = (\n props,\n { attrs: _attrs, slots },\n ) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('TransferListField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Get the current array value\n const arrayValue: ItemType[] = formState.getValue(props.name) || [];\n\n // Get the component instance for emitting events\n const instance = getCurrentInstance();\n\n // Handle auto-prefixing for nested fields if enabled\n const getFieldName = (fieldPath: string, index: number) => {\n if (props.autoPrefixFields) {\n return `${props.name}.${index}.${fieldPath}`;\n }\n return fieldPath;\n };\n\n // Default item identifier function\n const defaultItemIdentifier = (item: ItemType): string | number => {\n if (typeof item === 'object' && item !== null) {\n // Try to use common ID fields\n if ('id' in item) return (item as any).id;\n if ('name' in item) return (item as any).name;\n if ('key' in item) return (item as any).key;\n if ('value' in item) return (item as any).value;\n }\n // Fallback to string representation\n return JSON.stringify(item);\n };\n\n // Use provided identifier or default\n const getItemIdentifier = props.itemIdentifier || defaultItemIdentifier;\n\n // Compute filtered available items (exclude items that are already selected)\n const availableItems = computed(() => {\n const selectedIds = new Set(arrayValue.map(getItemIdentifier));\n return props.allAvailableItems.filter((item) => !selectedIds.has(getItemIdentifier(item)));\n });\n\n // Extract min/max constraints from the schema metadata\n const minItems = fieldMetadata?.min;\n const maxItems = fieldMetadata?.max;\n\n // Function to add an item to the array\n const addItem = (item: ItemType) => {\n const currentArray = [...arrayValue];\n\n // Check if we've reached the maximum number of items\n if (maxItems !== undefined && currentArray.length >= maxItems) {\n return;\n }\n\n // Create a copy of the item to avoid reference issues\n const itemCopy = JSON.parse(JSON.stringify(item));\n\n // Add the item to the array\n currentArray.push(itemCopy);\n formState.setValue(props.name, currentArray);\n\n // Validate the field after modification\n formState.validateField(props.name);\n\n // Emit an event for the parent component\n if (instance) {\n instance.emit('item-added', itemCopy);\n }\n };\n\n // Function to remove an item from the array\n const removeItem = (index: number) => {\n const currentArray = [...arrayValue];\n\n // Check if we've reached the minimum number of items\n if (minItems !== undefined && currentArray.length <= minItems) {\n return;\n }\n\n // Store the item being removed for the event\n const removedItem = currentArray[index];\n\n // Remove the item from the array\n currentArray.splice(index, 1);\n formState.setValue(props.name, currentArray);\n\n // Validate the field after modification\n formState.validateField(props.name);\n\n // Emit an event for the parent component\n if (instance) {\n instance.emit('item-removed', removedItem, index);\n }\n };\n\n // Function to swap items in the array (move up/down)\n const swapItems = (indexA: number, indexB: number) => {\n if (indexA < 0 || indexA >= arrayValue.length || indexB < 0 || indexB >= arrayValue.length) {\n return;\n }\n\n const currentArray = [...arrayValue];\n\n // Swap the items\n const temp = currentArray[indexA];\n currentArray[indexA] = currentArray[indexB];\n currentArray[indexB] = temp;\n formState.setValue(props.name, currentArray);\n\n // Validate the field after modification\n formState.validateField(props.name);\n\n // Emit an event for the parent component\n if (instance) {\n instance.emit('items-swapped', indexA, indexB, currentArray[indexA], currentArray[indexB]);\n }\n };\n\n // Function to move an item up in the array\n const moveItemUp = (index: number) => {\n if (index > 0) {\n swapItems(index, index - 1);\n }\n };\n\n // Function to move an item down in the array\n const moveItemDown = (index: number) => {\n if (index < arrayValue.length - 1) {\n swapItems(index, index + 1);\n }\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Get accessibility labels with defaults\n const ariaLabels = {\n addButton: props.ariaLabels?.addButton || 'Add item',\n removeButton: props.ariaLabels?.removeButton || 'Remove item',\n moveUpButton: props.ariaLabels?.moveUpButton || 'Move item up',\n moveDownButton: props.ariaLabels?.moveDownButton || 'Move item down',\n availableItems: props.ariaLabels?.availableItems || 'Available items',\n selectedItems: props.ariaLabels?.selectedItems || 'Selected items',\n };\n\n // Check if add button should be disabled\n const isAddButtonDisabled = !!(\n props.disabled ||\n props.readonly ||\n (maxItems !== undefined && arrayValue.length >= maxItems)\n );\n\n // Check if remove button should be disabled\n const isRemoveButtonDisabled = (_index: number) => {\n return !!(props.disabled || props.readonly || (minItems !== undefined && arrayValue.length <= minItems));\n };\n\n // Render the available items section\n const renderAvailableItems = () => {\n if (availableItems.value.length === 0) {\n return (\n <div class=\"mt-4\">\n <h4 class=\"font-medium mb-2\">{ariaLabels.availableItems}</h4>\n <div class=\"text-sm text-gray-500\">No items available</div>\n </div>\n );\n }\n\n return (\n <div class=\"mt-4\">\n <h4 class=\"font-medium mb-2\">{ariaLabels.availableItems}</h4>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2\">\n {availableItems.value.map((item, index) => (\n <div\n key={index}\n class=\"flex items-center justify-between p-3 border rounded-lg bg-base-100 hover:bg-base-200\"\n >\n <div class=\"flex-1\">\n {/* Use the slot function if provided */}\n {slots.availableItemRenderer?.({ item, index }) || JSON.stringify(item)}\n </div>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-primary ml-2\"\n onClick={() => addItem(item)}\n disabled={isAddButtonDisabled}\n aria-label={ariaLabels.addButton}\n data-testid={`${formState.storeName}-transfer-list-field-${String(props.name)}-add-available-${index}`}\n >\n Add\n </button>\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n // Render the selected items section\n const renderSelectedItems = () => {\n if (arrayValue.length === 0) {\n return (\n <div class=\"mt-4\">\n <h4 class=\"font-medium mb-2\">{ariaLabels.selectedItems}</h4>\n <div class=\"text-sm text-gray-500\">No items selected</div>\n </div>\n );\n }\n\n return (\n <div class=\"mt-4\">\n <h4 class=\"font-medium mb-2\">{ariaLabels.selectedItems}</h4>\n <div class=\"space-y-2\">\n {arrayValue.map((item: ItemType, index: number) => (\n <div\n key={index}\n class=\"flex items-center justify-between p-3 border rounded-lg bg-base-100 hover:bg-base-200\"\n >\n <div class=\"flex-1\">\n {/* Use the slot function if provided */}\n {slots.selectedItemRenderer?.({\n item,\n index,\n getFieldName: (fieldPath: string) => getFieldName(fieldPath, index),\n }) || JSON.stringify(item)}\n </div>\n <div class=\"flex items-center space-x-1 ml-2\">\n {props.allowReordering && (\n <div class=\"flex space-x-1\">\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost btn-square\"\n onClick={() => moveItemUp(index)}\n disabled={index === 0 || props.disabled || props.readonly}\n aria-label={ariaLabels.moveUpButton}\n data-testid={`${formState.storeName}-transfer-list-field-${String(props.name)}-move-up-${index}`}\n >\n ↑\n </button>\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost btn-square\"\n onClick={() => moveItemDown(index)}\n disabled={index === arrayValue.length - 1 || props.disabled || props.readonly}\n aria-label={ariaLabels.moveDownButton}\n data-testid={`${formState.storeName}-transfer-list-field-${String(props.name)}-move-down-${index}`}\n >\n ↓\n </button>\n </div>\n )}\n <button\n type=\"button\"\n class=\"btn btn-sm btn-error\"\n onClick={() => removeItem(index)}\n disabled={isRemoveButtonDisabled(index)}\n aria-label={ariaLabels.removeButton}\n data-testid={`${formState.storeName}-transfer-list-field-${String(props.name)}-remove-${index}`}\n >\n Remove\n </button>\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n };\n\n // Render the complete field structure\n return (\n <div class={`form-control ${props.class || ''}`}>\n {!props.hideLabel && (\n <label class=\"label\">\n <span class=\"label-text\">\n {props.label || fieldMetadata?.label}\n {fieldMetadata?.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n </label>\n )}\n\n {/* Custom content slot */}\n {slots.default?.()}\n\n {/* Available items section */}\n {renderAvailableItems()}\n\n {/* Selected items section */}\n {renderSelectedItems()}\n\n {props.description && <p class=\"text-sm mt-1\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error mt-1\">{formState.getError(props.name)}</p>}\n </div>\n );\n };\n\n // Define props\n DaisyUITransferListField.props = [\n 'name',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'disabled',\n 'readonly',\n 'class',\n 'allAvailableItems',\n 'itemIdentifier',\n 'availableItemRenderer',\n 'selectedItemRenderer',\n 'allowReordering',\n 'autoPrefixFields',\n 'ariaLabels',\n ];\n\n return DaisyUITransferListField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport { ZINIA_FORM_KEY } from '../../useForm';\nimport type { UrlFieldProps } from '../types/UrlFieldProps';\n\n// DaisyUI styled url field component\nexport function createDaisyUIUrlField<FormType>() {\n const DaisyUIUrlField: FunctionalComponent<UrlFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>(ZINIA_FORM_KEY);\n\n if (!formState) {\n console.error('UrlField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Create the input props\n const inputProps = {\n type: 'url',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n autocomplete: props.autocomplete || 'url',\n pattern: props.pattern || fieldMetadata.pattern?.toString().slice(1, -1), // Convert RegExp to string pattern\n name: props.name,\n ...attrs,\n };\n\n // Get field state\n const hasErrors = formState.hasError(props.name);\n const isTouched = formState.isTouched(props.name);\n\n // Compute input classes\n const inputClass = [\n 'input',\n props.size ? `input-${props.size}` : '',\n props.variant ? `input-${props.variant}` : '',\n isTouched && !hasErrors ? 'input-success' : '',\n isTouched && hasErrors ? 'input-error' : '',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Render the complete field structure\n return (\n <label class=\"floating-label\">\n {!props.hideLabel && (\n <span>\n {props.label || fieldMetadata.label}\n {fieldMetadata.isRequired && <span class=\"text-error\"> *</span>}\n </span>\n )}\n\n <input\n class={inputClass}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-url-field-${String(props.name)}`}\n {...inputProps}\n />\n\n {props.description && <p class=\"\">{props.description}</p>}\n\n {isTouched && hasErrors && <p class=\"text-error text-xs\">{formState.getError(props.name)}</p>}\n </label>\n );\n };\n\n // Define props\n DaisyUIUrlField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'pattern',\n ];\n\n return DaisyUIUrlField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaDisplay } from '../../useDisplay';\nimport { ZINIA_DISPLAY_KEY } from '../../useDisplay';\nimport type { DisplayProps } from '../types/DisplayProps';\nimport { z } from 'zod';\n\n// DaisyUI styled display wrapper component with ViewQuote.vue defaults\n// Pure data presentation - parent handles loading/error/no-data states\nexport function createDaisyUIDisplay<FormType>() {\n const DaisyUIDisplay: FunctionalComponent<DisplayProps<FormType>> = (props, { slots }) => {\n // Inject display state with proper typing\n const displayState = inject<ZiniaDisplay<z.ZodObject<any>>>(ZINIA_DISPLAY_KEY);\n\n if (!displayState) {\n console.error('Display: displayState is required but was not injected');\n return null;\n }\n\n // Default to ViewQuote.vue card-based layout with responsive grid\n const layout = props.layout || 'grid';\n const columns = props.columns || 2;\n const gap = props.gap || 'md';\n const responsive = props.responsive ?? true;\n\n // Responsive gap classes\n const getGapClass = () => {\n switch (gap) {\n case 'sm':\n return 'gap-1 sm:gap-2';\n case 'lg':\n return 'gap-4 sm:gap-6';\n default:\n return 'gap-2 sm:gap-4';\n }\n };\n\n // Responsive grid columns (ViewQuote.vue pattern)\n const getGridColumns = () => {\n if (responsive) {\n return `grid-cols-1 md:grid-cols-${columns}`;\n }\n return `grid-cols-${columns}`;\n };\n\n // Default card wrapper (like ViewQuote.vue)\n const cardClasses = ['card bg-base-100 shadow-sm mb-4', props.class].filter(Boolean).join(' ');\n\n const cardBodyClasses = ['card-body', responsive ? 'p-3 sm:p-4 md:p-5' : 'p-5'].filter(Boolean).join(' ');\n\n // Content wrapper classes based on layout\n const contentClasses = [\n 'zinia-display',\n layout === 'grid' ? `grid ${getGapClass()} ${getGridColumns()}` : '',\n layout === 'horizontal' ? `flex flex-wrap ${getGapClass()}` : '',\n layout === 'vertical' ? `flex flex-col ${getGapClass()}` : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n // Always use card layout by default (ViewQuote.vue pattern)\n return (\n <div class={cardClasses} data-testid=\"display-container\">\n <div class={cardBodyClasses}>\n {props.title && (\n <div class=\"flex justify-between items-center mb-3\">\n <h2 class=\"card-title\">{props.title}</h2>\n </div>\n )}\n <div class={contentClasses}>{slots.default?.()}</div>\n </div>\n </div>\n );\n };\n\n // Define props\n DaisyUIDisplay.props = [\n 'loading',\n 'error',\n 'class',\n 'variant',\n 'showLabels',\n 'layout',\n 'columns',\n 'title',\n 'cardClass',\n 'cardBodyClass',\n 'gap',\n 'fieldBorders',\n 'responsive',\n ];\n\n return DaisyUIDisplay;\n}\n","import { type FunctionalComponent, inject, computed } from 'vue';\nimport type { ZiniaDisplay } from '../../useDisplay';\nimport { ZINIA_DISPLAY_KEY } from '../../useDisplay';\nimport type { DisplayFieldProps } from '../types/DisplayFieldProps';\n\n// DaisyUI styled display field component\nexport function createDaisyUIDisplayField<FormType>() {\n const DaisyUIDisplayField: FunctionalComponent<DisplayFieldProps<FormType>> = (props, { attrs }) => {\n // Inject display state\n const displayState = inject<ZiniaDisplay>(ZINIA_DISPLAY_KEY);\n\n if (!displayState) {\n console.error(`DisplayField (${props.name}): displayState is required but was not injected`);\n return null;\n }\n\n const fieldMetadata = displayState.fieldsMetadata[props.name] || {};\n \n // Get the raw value\n const rawValue = displayState.getValue(props.name);\n \n // Format the value based on the format prop\n const formattedValue = computed(() => {\n if (rawValue === null || rawValue === undefined || rawValue === '') {\n return props.emptyText || '—';\n }\n\n switch (props.format) {\n case 'currency':\n if (typeof rawValue === 'number') {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n }).format(rawValue);\n }\n return rawValue;\n\n case 'date':\n if (rawValue instanceof Date || typeof rawValue === 'string') {\n const date = new Date(rawValue);\n return date.toLocaleDateString();\n }\n return rawValue;\n\n case 'datetime':\n if (rawValue instanceof Date || typeof rawValue === 'string') {\n const date = new Date(rawValue);\n return date.toLocaleString();\n }\n return rawValue;\n\n case 'email':\n return (\n <a href={`mailto:${rawValue}`} class=\"link link-primary\">\n {rawValue}\n </a>\n );\n\n case 'url':\n return (\n <a href={rawValue} target=\"_blank\" rel=\"noopener noreferrer\" class=\"link link-primary\">\n {rawValue}\n </a>\n );\n\n case 'phone':\n return (\n <a href={`tel:${rawValue}`} class=\"link link-primary\">\n {rawValue}\n </a>\n );\n\n case 'boolean':\n return rawValue ? (\n <span class=\"badge badge-success\">Yes</span>\n ) : (\n <span class=\"badge badge-ghost\">No</span>\n );\n\n case 'badge':\n const badgeClass = props.badgeClass || 'badge-primary';\n return <span class={`badge ${badgeClass}`}>{rawValue}</span>;\n\n case 'status':\n // Status formatting with mapping (like ViewQuote.vue status badges)\n if (props.statusMapping && props.statusMapping[rawValue]) {\n const statusConfig = props.statusMapping[rawValue];\n const displayLabel = statusConfig.label || rawValue;\n return <span class={`badge ${statusConfig.class}`}>{displayLabel}</span>;\n }\n // Default status badge\n return <span class=\"badge badge-info\">{rawValue}</span>;\n\n case 'number':\n if (typeof rawValue === 'number') {\n return new Intl.NumberFormat().format(rawValue);\n }\n return rawValue;\n\n default:\n // Handle arrays\n if (Array.isArray(rawValue)) {\n const items = props.maxItems ? rawValue.slice(0, props.maxItems) : rawValue;\n const renderedItems = items.map((item, index) => {\n if (props.itemRenderer) {\n return props.itemRenderer(item, index);\n }\n return typeof item === 'object' ? JSON.stringify(item) : String(item);\n });\n \n let result = renderedItems.join(props.separator || ', ');\n if (props.maxItems && rawValue.length > props.maxItems) {\n result += ` and ${rawValue.length - props.maxItems} more...`;\n }\n return result;\n }\n\n // Handle enum values with labels\n if (props.valueToLabel && props.valueToLabel[rawValue]) {\n return props.valueToLabel[rawValue];\n }\n\n return String(rawValue);\n }\n });\n\n // Get the label from props or metadata\n const label = props.label || fieldMetadata?.label || props.name;\n\n // Copy functionality\n const copyToClipboard = async () => {\n if (props.copyable && rawValue) {\n try {\n await navigator.clipboard.writeText(String(rawValue));\n // Could add a toast notification here\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n };\n\n // Default to ViewQuote.vue bordered field styling\n const renderField = () => {\n // Default to bordered style (ViewQuote.vue pattern)\n return (\n <div class={`border-b border-base-300 pb-2 sm:pb-3 mb-2 sm:mb-3 ${props.containerClass || ''}`}>\n {!props.hideLabel && (\n <div class={`text-xs sm:text-sm font-medium text-base-content/70 ${props.labelClass || ''}`}>\n {label}\n </div>\n )}\n <div class={`text-sm sm:text-base mt-1 font-medium ${props.valueClass || ''}`}>\n {formattedValue.value}\n {props.copyable && (\n <button\n onClick={copyToClipboard}\n class=\"ml-2 btn btn-ghost btn-xs sm:btn-sm hover:btn-primary transition-colors\"\n title=\"Copy to clipboard\"\n >\n <span class=\"text-xs sm:text-sm\">📋</span>\n </button>\n )}\n </div>\n {props.description && (\n <div class=\"text-xs text-base-content/60 mt-1\">{props.description}</div>\n )}\n </div>\n );\n };\n\n // Apply size classes\n const sizeClass = props.size === 'sm' ? 'text-sm' : props.size === 'lg' ? 'text-lg' : '';\n const wrapperClasses = [\n 'zinia-display-field',\n sizeClass,\n props.class,\n ].filter(Boolean).join(' ');\n\n return (\n <div class={wrapperClasses} data-testid={`${displayState.storeName}-display-field-${String(props.name)}`} {...attrs}>\n {renderField()}\n </div>\n );\n };\n\n // Define props\n DaisyUIDisplayField.props = [\n 'name',\n 'label',\n 'hideLabel',\n 'description',\n 'format',\n 'emptyText',\n 'class',\n 'size',\n 'variant',\n 'copyable',\n 'labelClass',\n 'valueClass',\n 'containerClass',\n 'badgeClass',\n 'statusMapping',\n 'valueToLabel',\n 'separator',\n 'itemRenderer',\n 'maxItems',\n ];\n\n return DaisyUIDisplayField;\n}","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaDeleteModal } from '../../useDeleteModal';\nimport { ZINIA_DELETE_MODAL_KEY } from '../../useDeleteModal';\nimport type { DeleteModalProps } from '../types/DeleteModalProps';\nimport { z } from 'zod';\n\n// DaisyUI styled delete confirmation modal component\n// Simple modal wrapper - user provides content via slots\nexport function createDaisyUIDeleteModal<FormType>() {\n const DaisyUIDeleteModal: FunctionalComponent<DeleteModalProps<FormType>> = (props, { slots }) => {\n // Inject delete modal state\n const deleteModalState = inject<ZiniaDeleteModal<z.ZodObject<any>>>(ZINIA_DELETE_MODAL_KEY);\n\n if (!deleteModalState) {\n console.error('DeleteModal: deleteModalState is required but was not injected');\n return null;\n }\n\n // Handle modal close\n const handleClose = () => {\n if (props.onClose) {\n props.onClose();\n }\n };\n\n // Handle delete confirmation\n const handleConfirmDelete = async () => {\n try {\n await deleteModalState.confirmDelete();\n handleClose();\n } catch (error) {\n // Error is handled by the deleteModal state\n console.error('Delete confirmation failed:', error);\n }\n };\n\n // Handle ESC key\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && !deleteModalState.isLoading) {\n handleClose();\n }\n };\n\n // Get text values\n const title = props.title || 'Confirm Deletion';\n const message = props.message || 'Are you sure you want to delete this item? This action cannot be undone.';\n const confirmText = props.confirmText || 'Delete';\n const cancelText = props.cancelText || 'Cancel';\n\n return (\n <div \n class={`modal ${props.open ? 'modal-open' : ''}`}\n onKeydown={handleKeydown}\n data-testid=\"delete-modal\"\n >\n <div class=\"modal-box relative max-w-2xl\" onClick={(e) => e.stopPropagation()}>\n {/* Loading overlay */}\n {deleteModalState.isLoading && (\n <div class=\"absolute inset-0 bg-base-100/80 flex items-center justify-center z-10 rounded-lg\">\n <div class=\"flex flex-col items-center gap-3\">\n <span class=\"loading loading-spinner loading-lg text-primary\"></span>\n <span class=\"text-sm font-medium\">Deleting...</span>\n </div>\n </div>\n )}\n\n {/* Close button */}\n {!deleteModalState.isLoading && (\n <button\n class=\"btn btn-sm btn-circle btn-ghost absolute right-2 top-2\"\n onClick={handleClose}\n aria-label=\"Close\"\n >\n ✕\n </button>\n )}\n\n {/* Header */}\n <div class=\"mb-6\">\n <h3 class=\"font-bold text-lg text-error flex items-center gap-2\">\n <span class=\"text-xl\">⚠️</span>\n {title}\n </h3>\n <p class=\"text-base-content/80 mt-2\">\n {message}\n </p>\n </div>\n\n {/* Error display */}\n {deleteModalState.error && (\n <div class=\"alert alert-error mb-4\">\n <span class=\"text-sm\">{deleteModalState.error}</span>\n <button \n class=\"btn btn-ghost btn-xs\"\n onClick={() => deleteModalState.clearError()}\n >\n ✕\n </button>\n </div>\n )}\n\n {/* Content area - user provides fields via slots */}\n {deleteModalState.data && (\n <div class=\"mb-6\">\n <div class=\"bg-base-200/50 rounded-lg p-4 max-h-60 overflow-y-auto\">\n {slots.default?.()}\n </div>\n </div>\n )}\n\n {/* Action buttons */}\n <div class=\"modal-action\">\n <button\n class=\"btn btn-ghost\"\n onClick={handleClose}\n disabled={deleteModalState.isLoading}\n data-testid=\"delete-modal-cancel\"\n >\n {cancelText}\n </button>\n <button\n class=\"btn btn-error\"\n onClick={handleConfirmDelete}\n disabled={deleteModalState.isLoading}\n data-testid=\"delete-modal-confirm\"\n >\n {deleteModalState.isLoading ? (\n <>\n <span class=\"loading loading-spinner loading-sm\"></span>\n Deleting...\n </>\n ) : (\n confirmText\n )}\n </button>\n </div>\n </div>\n\n {/* Backdrop - click to close */}\n <div \n class=\"modal-backdrop\" \n onClick={handleClose}\n />\n </div>\n );\n };\n\n // Define props\n DaisyUIDeleteModal.props = [\n 'open',\n 'title',\n 'message',\n 'confirmText',\n 'cancelText',\n 'onClose',\n ];\n\n return DaisyUIDeleteModal;\n}","/**\n * Filter helper functions for DataTable\n */\n\nimport type { FieldMetadata } from '../../../../types/fieldMetadataTypes';\n\n/**\n * Infer filterType from metadata if not explicitly provided\n */\nexport function getFilterType(\n field: string,\n column: any,\n fieldsMetadata: Record<string, FieldMetadata>,\n): 'text' | 'select' | 'number' | 'boolean' | undefined {\n // If explicitly provided, use it\n if (column?.filterType) {\n return column.filterType;\n }\n\n // If filterable but no filterType, infer from metadata\n if (column?.filterable) {\n const fieldMetadata = fieldsMetadata[field];\n const inputType = fieldMetadata?.inputType;\n\n switch (inputType) {\n case 'number':\n case 'range':\n return 'number';\n\n case 'checkbox':\n return 'boolean';\n\n case 'select':\n case 'radio':\n // Use select filter if we have options (either in column or metadata)\n return column.filterOptions || fieldMetadata?.options ? 'select' : 'text';\n\n default:\n // Default to text filter\n return 'text';\n }\n }\n\n return undefined;\n}\n\n/**\n * Get filter options from column config or metadata\n */\nexport function getFilterOptions(\n field: string,\n column: any,\n fieldsMetadata: Record<string, FieldMetadata>,\n filterOptionsState?: Record<string, any[]>,\n): any[] {\n // Check for async loaded options first\n if (filterOptionsState && filterOptionsState[field]) {\n return filterOptionsState[field];\n }\n\n // If explicitly provided in column, use it\n if (column?.filterOptions) {\n return column.filterOptions;\n }\n\n // Otherwise, try to get from field metadata\n const fieldMetadata = fieldsMetadata[field];\n if (fieldMetadata?.options) {\n // Extract just the values for filtering\n return fieldMetadata.options.map((opt) => opt.value);\n }\n\n // If we have valueToLabel mapping, extract keys\n if (fieldMetadata?.valueToLabel) {\n return Object.keys(fieldMetadata.valueToLabel);\n }\n\n return [];\n}\n","/**\n * Sort helper functions for DataTable\n */\n\nimport type { FieldMetadata } from '../../../../types/fieldMetadataTypes';\n\nexport interface SortLabels {\n asc: string;\n desc: string;\n}\n\n/**\n * Get appropriate sort labels based on metadata inputType\n */\nexport function getSortLabels(\n field: string,\n column: any,\n fieldsMetadata: Record<string, FieldMetadata>,\n): SortLabels {\n // Check if user provided custom sort labels in column definition\n if (column?.sortLabels) {\n return column.sortLabels;\n }\n\n // Get inputType from metadata\n const fieldMetadata = fieldsMetadata[field];\n const inputType = fieldMetadata?.inputType;\n\n // Map inputType to appropriate sort labels\n switch (inputType) {\n case 'date':\n case 'datetime-local':\n case 'time':\n return {\n asc: 'Oldest first',\n desc: 'Newest first',\n };\n\n case 'number':\n case 'range':\n return {\n asc: 'Low to high',\n desc: 'High to low',\n };\n\n case 'checkbox':\n return {\n asc: 'No first',\n desc: 'Yes first',\n };\n\n default:\n return {\n asc: 'A to Z',\n desc: 'Z to A',\n };\n }\n}\n\n/**\n * Get the sort icon for a field\n */\nexport function getSortIcon(field: string, sortingField: string | null, sortingDirection: 'asc' | 'desc') {\n if (sortingField !== field) {\n return (\n <svg class=\"w-4 h-4 opacity-30\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4\"\n />\n </svg>\n );\n }\n\n return sortingDirection === 'asc' ? (\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 15l7-7 7 7\" />\n </svg>\n ) : (\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n );\n}\n","/**\n * Format helper functions for DataTable\n */\n\n/**\n * Format cell value with custom formatter or default formatting\n */\nexport function formatCellValue(value: any, _field: string, row: any, column: any) {\n if (column?.format) {\n return column.format(value, row);\n }\n\n if (column?.render) {\n return column.render(value, row);\n }\n\n // Default formatting\n if (value === null || value === undefined) {\n return '';\n }\n\n if (typeof value === 'boolean') {\n return value ? '✅' : '❌';\n }\n\n if (value instanceof Date) {\n return value.toLocaleDateString();\n }\n\n return String(value);\n}\n","/**\n * Action helper functions for DataTable\n * These handle rendering of action buttons/links and icons\n */\n\n/**\n * Render an icon (function, string SVG, or component)\n */\nexport function renderIcon(icon: any, row: any) {\n if (!icon) return null;\n\n // If it's a function, call it with the row data\n if (typeof icon === 'function') {\n return icon(row);\n }\n\n // If it's a string, treat it as SVG and render with innerHTML\n if (typeof icon === 'string') {\n return <span class=\"w-4 h-4 inline-flex items-center justify-center\" innerHTML={icon}></span>;\n }\n\n // Otherwise, render as a Vue component (e.g., from @heroicons/vue)\n return <span class=\"w-4 h-4 inline-flex items-center justify-center\">{icon}</span>;\n}\n\n/**\n * Render an action item (button or link)\n */\nexport function renderActionItem(action: any, row: any) {\n // Check visibility condition\n if (action.visible && !action.visible(row)) {\n return null;\n }\n\n // Validate that at least icon or label is provided\n if (!action.icon && !action.label) {\n console.warn(`Action \"${action.key}\" has neither icon nor label. At least one is required.`);\n return null;\n }\n\n // Check disabled condition\n const isDisabled = action.disabled ? action.disabled(row) : false;\n\n const baseClass = [\n 'btn',\n `btn-${action.size || 'xs'}`,\n action.variant && `btn-${action.variant}`,\n isDisabled && 'btn-disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n const iconElement = renderIcon(action.icon, row);\n const hasIcon = !!iconElement;\n const hasLabel = !!action.label;\n\n // Determine spacing and layout\n const iconClass = hasIcon && hasLabel ? 'mr-1' : '';\n\n // For accessibility, use label as aria-label if only icon is present\n const accessibilityProps = hasIcon && !hasLabel ? { 'aria-label': action.key } : {};\n\n // Render based on action type\n if (action.type === 'link') {\n const href = action.href(row);\n return (\n <a\n key={action.key}\n href={href}\n target={action.target || '_self'}\n class={baseClass}\n aria-disabled={isDisabled}\n onClick={isDisabled ? (e: Event) => e.preventDefault() : undefined}\n {...accessibilityProps}\n >\n {hasIcon && <span class={iconClass}>{iconElement}</span>}\n {hasLabel && action.label}\n </a>\n );\n } else {\n // Default to button type\n const handleClick = async () => {\n if (isDisabled) return;\n await action.onClick(row, action);\n };\n\n return (\n <button\n key={action.key}\n class={baseClass}\n disabled={isDisabled}\n onClick={handleClick}\n {...accessibilityProps}\n >\n {hasIcon && <span class={iconClass}>{iconElement}</span>}\n {hasLabel && action.label}\n </button>\n );\n }\n}\n","/**\n * Desktop Table layout component for DataTable\n */\n\nimport type { FunctionalComponent, Slots } from 'vue';\nimport { getSortIcon, formatCellValue, renderActionItem } from '../helpers';\n\nexport interface DesktopTableProps {\n data: any[];\n columns: Record<string, any>;\n columnKeys: string[];\n actions: any;\n hasSelection: boolean;\n selectionMode: 'none' | 'single' | 'multiple';\n isAllSelected: boolean;\n hasData: boolean;\n isLoading: boolean;\n isEmpty: boolean;\n sortingField: string | null;\n sortingDirection: 'asc' | 'desc';\n slots: Slots;\n tableName?: string;\n isRowSelected: (row: any) => boolean;\n onSelectAll: () => void;\n onClearSelection: () => void;\n onSelectRow: (row: any) => void;\n onSort: (field: string) => void;\n}\n\nexport const DesktopTable: FunctionalComponent<DesktopTableProps> = (props) => {\n return (\n <div class=\"hidden md:block overflow-x-auto\">\n <table class=\"table table-zebra w-full\">\n {/* Table Header */}\n <thead>\n <tr>\n {/* Selection header */}\n {props.hasSelection && (\n <th class=\"w-12\">\n {props.selectionMode === 'multiple' && (\n <input\n type=\"checkbox\"\n class=\"checkbox checkbox-sm\"\n checked={props.isAllSelected}\n onChange={(e) => {\n if ((e.target as HTMLInputElement).checked) {\n props.onSelectAll();\n } else {\n props.onClearSelection();\n }\n }}\n data-testid={`${props.tableName || 'datatable'}-select-all`}\n />\n )}\n </th>\n )}\n\n {props.columnKeys.map((field) => {\n // Handle actions column specially\n if (field === 'actions' && props.actions) {\n return (\n <th\n key=\"actions\"\n class={[\n props.actions.column?.align === 'center' && 'text-center',\n props.actions.column?.align === 'right' && 'text-right',\n ]}\n >\n {props.actions.column?.label || 'Actions'}\n </th>\n );\n }\n\n const column = props.columns[field];\n if (!column) return null;\n\n return (\n <th\n key={field}\n class={[\n 'cursor-pointer select-none transition-colors',\n !props.isLoading && 'hover:bg-base-200',\n column.sortable && !props.isLoading && 'hover:bg-base-200',\n props.sortingField === field && 'bg-base-200',\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n props.isLoading && 'opacity-50 cursor-not-allowed',\n ]}\n onClick={() => props.onSort(field)}\n data-testid={column.sortable ? `${props.tableName || 'datatable'}-sort-${field}` : undefined}\n >\n <div class=\"flex items-center gap-2\">\n <span>{column.label}</span>\n {column.sortable && getSortIcon(field, props.sortingField, props.sortingDirection)}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n\n {/* Table Body */}\n <tbody>\n {/* Loading overlay for data refresh */}\n {props.isLoading && props.hasData && (\n <tr>\n <td\n colspan={props.columnKeys.length + (props.hasSelection ? 1 : 0)}\n class=\"text-center py-4\"\n >\n <span class=\"loading loading-spinner loading-md\"></span>\n </td>\n </tr>\n )}\n\n {/* Empty State */}\n {props.isEmpty && !props.isLoading && (\n <tr>\n <td\n colspan={props.columnKeys.length + (props.hasSelection ? 1 : 0)}\n class=\"text-center py-8\"\n >\n <div class=\"flex flex-col items-center gap-2 text-base-content/60\">\n <svg class=\"w-12 h-12\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2 2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\n />\n </svg>\n <span class=\"text-lg font-medium\">No data found</span>\n <span class=\"text-sm\">Try adjusting your search or filters</span>\n </div>\n </td>\n </tr>\n )}\n\n {/* Data Rows */}\n {props.hasData ? (\n props.data.map((row, index) => (\n <tr\n key={index}\n class={[\n 'transition-colors hover:bg-base-200',\n props.isRowSelected(row) && 'bg-primary/10',\n ]}\n >\n {/* Selection cell */}\n {props.hasSelection && (\n <td class=\"w-12\">\n <input\n type=\"checkbox\"\n class=\"checkbox checkbox-sm\"\n checked={props.isRowSelected(row)}\n onChange={() => props.onSelectRow(row)}\n data-testid={`${props.tableName || 'datatable'}-row-${index}-select`}\n />\n </td>\n )}\n\n {props.columnKeys.map((field) => {\n // Handle actions column specially\n if (field === 'actions' && props.actions) {\n return (\n <td\n key=\"actions\"\n class={[\n props.actions.column?.align === 'center' && 'text-center',\n props.actions.column?.align === 'right' && 'text-right',\n ]}\n >\n <div class=\"flex gap-1 justify-center\">\n {props.actions.items.map((action: any) => renderActionItem(action, row))}\n </div>\n </td>\n );\n }\n\n const column = props.columns[field];\n if (!column) return null;\n\n const value = (row as any)[field];\n const formattedValue = formatCellValue(value, field, row, column);\n\n return (\n <td\n key={field}\n class={[\n column.align === 'center' && 'text-center',\n column.align === 'right' && 'text-right',\n column.textWrap === 'truncate' && 'max-w-xs',\n column.textWrap === 'wrap' && 'whitespace-normal',\n ]}\n >\n {props.slots[`cell-${field}`] ? (\n props.slots[`cell-${field}`]?.({ value, row, field, formattedValue })\n ) : (\n <span class={column.textWrap === 'truncate' ? 'truncate block' : undefined}>\n {formattedValue}\n </span>\n )}\n </td>\n );\n })}\n </tr>\n ))\n ) : (\n // Empty state row\n <tr>\n <td\n colspan={props.columnKeys.length + (props.hasSelection ? 1 : 0)}\n class=\"text-center py-8 text-base-content/60\"\n >\n No data available\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n );\n};\n","/**\n * Select filter component for DataTable\n */\n\nimport type { FunctionalComponent } from 'vue';\n\nexport interface SelectFilterProps {\n field: string;\n value: any;\n options: any[];\n label: string;\n isLoading: boolean;\n isOptionsLoading?: boolean;\n onFilterChange: (field: string, value: any, operator: 'eq' | 'contains' | 'gt' | 'lt' | 'in' | 'between') => void;\n}\n\nexport const SelectFilter: FunctionalComponent<SelectFilterProps> = (props) => {\n return (\n <select\n key={props.field}\n value={props.value}\n onChange={(e) => {\n const value = (e.target as HTMLSelectElement).value;\n // Select filters always use 'eq' operator\n props.onFilterChange(props.field, value, 'eq');\n }}\n class=\"select select-bordered flex-1 sm:flex-none sm:w-auto\"\n disabled={props.isLoading || props.isOptionsLoading}\n data-testid={`datatable-filter-${props.field}-input`}\n >\n <option value=\"\">\n {props.isOptionsLoading ? 'Loading options...' : `All ${props.label}`}\n </option>\n {props.options.map((option) => (\n <option key={option} value={option}>\n {typeof option === 'string' ? option.charAt(0).toUpperCase() + option.slice(1) : option}\n </option>\n ))}\n </select>\n );\n};\n","/**\n * Simple debounce utility for functional components\n */\n\n// Store timeouts in a Map to avoid global pollution\n// Using ReturnType<typeof setTimeout> for cross-platform compatibility\nconst timeoutStore = new Map<string, ReturnType<typeof setTimeout>>();\n\nexport function debounce(key: string, callback: () => void, delay: number = 300) {\n // Clear existing timeout for this key\n const existing = timeoutStore.get(key);\n if (existing) {\n clearTimeout(existing);\n }\n\n // Set new timeout\n const timeoutId = setTimeout(() => {\n callback();\n timeoutStore.delete(key);\n }, delay);\n\n timeoutStore.set(key, timeoutId);\n}\n\nexport function clearDebounce(key: string) {\n const existing = timeoutStore.get(key);\n if (existing) {\n clearTimeout(existing);\n timeoutStore.delete(key);\n }\n}\n","/**\n * Text filter component for DataTable\n */\n\nimport type { FunctionalComponent, Ref } from 'vue';\nimport { debounce } from '../helpers/debounce';\n\nexport interface TextFilterProps {\n field: string;\n value: string;\n label: string;\n filterInputValues: Ref<Record<string, string>>;\n filterOperators: Ref<Record<string, 'eq' | 'contains' | 'gt' | 'lt' | 'in' | 'between'>>;\n onFilterChange: (field: string, value: any, operator: 'eq' | 'contains' | 'gt' | 'lt' | 'in' | 'between') => void;\n}\n\nexport const TextFilter: FunctionalComponent<TextFilterProps> = (props) => {\n const currentOperator = props.filterOperators.value[props.field] || 'contains';\n\n return (\n <div class=\"flex gap-2 flex-1 sm:flex-none\">\n {/* Operator Dropdown */}\n <select\n value={currentOperator}\n onChange={(e) => {\n const newOperator = (e.target as HTMLSelectElement).value as 'eq' | 'contains';\n props.filterOperators.value[props.field] = newOperator;\n\n // Re-apply filter with new operator if value exists\n const currentValue = props.filterInputValues.value[props.field];\n if (currentValue) {\n props.onFilterChange(props.field, currentValue, newOperator);\n }\n }}\n class=\"select select-bordered select-sm w-28\"\n data-testid={`datatable-filter-${props.field}-operator`}\n >\n <option value=\"contains\">Contains</option>\n <option value=\"eq\">Equals</option>\n </select>\n\n {/* Text Input */}\n <input\n key={props.field}\n type=\"text\"\n value={props.filterInputValues.value[props.field] || ''}\n onInput={(e) => {\n const value = (e.target as HTMLInputElement).value;\n // Update the input value immediately for responsive UI\n props.filterInputValues.value[props.field] = value;\n\n // Debounced filter using clean debounce helper\n debounce(\n `filter_${props.field}`,\n () => {\n props.onFilterChange(props.field, value, currentOperator);\n },\n 300,\n );\n }}\n onKeydown={(e) => {\n // Handle clear on Escape key\n if (e.key === 'Escape' && props.filterInputValues.value[props.field]) {\n e.preventDefault();\n props.filterInputValues.value[props.field] = '';\n props.onFilterChange(props.field, '', currentOperator);\n }\n }}\n placeholder={`Filter by ${props.label}`}\n class=\"input input-bordered input-sm flex-1\"\n data-testid={`datatable-filter-${props.field}-input`}\n />\n </div>\n );\n};\n","/**\n * Number filter component for DataTable\n */\n\nimport type { FunctionalComponent, Ref } from 'vue';\nimport { debounce } from '../helpers/debounce';\n\nexport interface NumberFilterProps {\n field: string;\n value: string;\n label: string;\n filterInputValues: Ref<Record<string, string>>;\n filterOperators: Ref<Record<string, 'eq' | 'contains' | 'gt' | 'lt' | 'in' | 'between'>>;\n onFilterChange: (field: string, value: any, operator: 'eq' | 'contains' | 'gt' | 'lt' | 'in' | 'between') => void;\n}\n\nexport const NumberFilter: FunctionalComponent<NumberFilterProps> = (props) => {\n const currentOperator = props.filterOperators.value[props.field] || 'eq';\n\n return (\n <div class=\"flex gap-2 flex-1 sm:flex-none\">\n {/* Operator Dropdown */}\n <select\n value={currentOperator}\n onChange={(e) => {\n const newOperator = (e.target as HTMLSelectElement).value as 'eq' | 'gt' | 'lt';\n props.filterOperators.value[props.field] = newOperator;\n\n // Re-apply filter with new operator if value exists\n const currentValue = props.filterInputValues.value[props.field];\n if (currentValue) {\n props.onFilterChange(props.field, currentValue, newOperator);\n }\n }}\n class=\"select select-bordered select-sm w-16\"\n data-testid={`datatable-filter-${props.field}-operator`}\n >\n <option value=\"eq\">=</option>\n <option value=\"gt\">&gt;</option>\n <option value=\"lt\">&lt;</option>\n </select>\n\n {/* Number Input */}\n <input\n key={props.field}\n type=\"number\"\n value={props.filterInputValues.value[props.field] || ''}\n onInput={(e) => {\n const value = (e.target as HTMLInputElement).value;\n // Update the input value immediately for responsive UI\n props.filterInputValues.value[props.field] = value;\n\n // Debounced filter using clean debounce helper\n debounce(\n `filter_${props.field}`,\n () => {\n props.onFilterChange(props.field, value, currentOperator);\n },\n 300,\n );\n }}\n onKeydown={(e) => {\n // Handle clear on Escape key\n if (e.key === 'Escape' && props.filterInputValues.value[props.field]) {\n e.preventDefault();\n props.filterInputValues.value[props.field] = '';\n props.onFilterChange(props.field, '', currentOperator);\n }\n }}\n placeholder={`Filter by ${props.label}`}\n class=\"input input-bordered input-sm flex-1\"\n data-testid={`datatable-filter-${props.field}-input`}\n />\n </div>\n );\n};\n","/**\n * Boolean filter component for DataTable\n */\n\nimport type { FunctionalComponent } from 'vue';\n\nexport interface BooleanFilterProps {\n field: string;\n value: any;\n label: string;\n isLoading: boolean;\n onFilterChange: (field: string, value: any, operator: 'eq' | 'contains' | 'gt' | 'lt' | 'in' | 'between') => void;\n}\n\nexport const BooleanFilter: FunctionalComponent<BooleanFilterProps> = (props) => {\n return (\n <select\n key={props.field}\n value={props.value}\n onChange={(e) => {\n const stringValue = (e.target as HTMLSelectElement).value;\n // Convert string \"true\"/\"false\" to actual boolean, or empty string to empty string\n const value = stringValue === 'true' ? true : stringValue === 'false' ? false : stringValue;\n // Boolean filters always use 'eq' operator\n props.onFilterChange(props.field, value, 'eq');\n }}\n class=\"select select-bordered flex-1 sm:flex-none sm:w-auto\"\n disabled={props.isLoading}\n data-testid={`datatable-filter-${props.field}-input`}\n >\n <option value=\"\">All</option>\n <option value=\"true\">Yes</option>\n <option value=\"false\">No</option>\n </select>\n );\n};\n","/**\n * Filters row component for DataTable\n * Renders all filter controls and action buttons\n */\n\nimport type { FunctionalComponent, Ref } from 'vue';\nimport { inject } from 'vue';\nimport type { FieldMetadata } from '../../../../types/fieldMetadataTypes';\nimport { getFilterType, getFilterOptions } from '../helpers/filterHelpers';\nimport { SelectFilter, TextFilter, NumberFilter, BooleanFilter } from '../filters';\nimport {\n ZINIA_DATA_TABLE_FILTER_OPTIONS_STATE_KEY,\n ZINIA_DATA_TABLE_FILTER_OPTIONS_LOADING_KEY,\n} from '../../../../useDataTable';\n\nexport interface FiltersRowProps {\n columns: Record<string, any>;\n activeFilters: Record<string, any>;\n filterInputValues: Ref<Record<string, string>>;\n filterOperators: Ref<Record<string, 'eq' | 'contains' | 'gt' | 'lt' | 'in' | 'between'>>;\n filterOptionsState?: Ref<Record<string, any[]>>;\n filterOptionsLoading?: Ref<Record<string, boolean>>;\n fieldsMetadata: Record<string, FieldMetadata>;\n isLoading: boolean;\n filterCount: number;\n tableName?: string;\n onFilterChange: (field: string, value: any, operator: 'eq' | 'contains' | 'gt' | 'lt' | 'in' | 'between') => void;\n onClearAllFilters: () => void;\n onRefresh: () => void;\n}\n\nexport const FiltersRow: FunctionalComponent<FiltersRowProps> = (props) => {\n const filterOptionsState = inject<Ref<Record<string, any[]>>>(ZINIA_DATA_TABLE_FILTER_OPTIONS_STATE_KEY);\n const filterOptionsLoading = inject<Ref<Record<string, boolean>>>(ZINIA_DATA_TABLE_FILTER_OPTIONS_LOADING_KEY);\n\n return (\n <div class=\"mb-4\">\n <div class=\"flex flex-col sm:flex-row gap-3 sm:items-center\">\n {/* Filter Controls */}\n <div class=\"flex flex-col sm:flex-row gap-2 sm:gap-3 flex-1\">\n {Object.entries(props.columns).map(([field, column]) => {\n if (!column?.filterable) return null;\n\n const currentFilter = props.activeFilters[field];\n const currentValue = currentFilter?.value ?? '';\n const filterType = getFilterType(field, column, props.fieldsMetadata);\n\n if (filterType === 'select') {\n const filterOptions = getFilterOptions(field, column, props.fieldsMetadata, filterOptionsState?.value);\n return (\n <SelectFilter\n key={field}\n field={field}\n value={currentValue}\n options={filterOptions}\n label={column.label}\n isLoading={props.isLoading}\n isOptionsLoading={filterOptionsLoading?.value?.[field] ?? false}\n onFilterChange={props.onFilterChange}\n />\n );\n }\n\n if (filterType === 'text') {\n return (\n <TextFilter\n key={field}\n field={field}\n value={currentValue}\n label={column.label}\n filterInputValues={props.filterInputValues}\n filterOperators={props.filterOperators}\n onFilterChange={props.onFilterChange}\n />\n );\n }\n\n if (filterType === 'number') {\n return (\n <NumberFilter\n key={field}\n field={field}\n value={currentValue}\n label={column.label}\n filterInputValues={props.filterInputValues}\n filterOperators={props.filterOperators}\n onFilterChange={props.onFilterChange}\n />\n );\n }\n\n if (filterType === 'boolean') {\n return (\n <BooleanFilter\n key={field}\n field={field}\n value={currentValue}\n label={column.label}\n isLoading={props.isLoading}\n onFilterChange={props.onFilterChange}\n />\n );\n }\n\n return null;\n })}\n </div>\n\n {/* Filter Actions */}\n <div class=\"flex gap-2 sm:gap-3\">\n <button\n onClick={() => props.onClearAllFilters()}\n class=\"btn btn-outline flex-1 sm:flex-none\"\n disabled={props.isLoading || props.filterCount === 0}\n data-testid={`${props.tableName || 'datatable'}-filters-clear-all`}\n >\n <span class=\"hidden sm:inline\">Clear Filters</span>\n <span class=\"sm:hidden\">Clear</span>\n </button>\n\n <button\n onClick={() => props.onRefresh()}\n class=\"btn btn-primary flex-1 sm:flex-none\"\n disabled={props.isLoading}\n data-testid={`${props.tableName || 'datatable'}-refresh`}\n >\n {props.isLoading && (\n <svg\n class=\"animate-spin -ml-1 mr-2 h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n )}\n <span class=\"hidden sm:inline\">{props.isLoading ? 'Loading...' : 'Refresh'}</span>\n <span class=\"sm:hidden\">\n {!props.isLoading && (\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"\n />\n </svg>\n )}\n </span>\n </button>\n </div>\n </div>\n </div>\n );\n};\n","/**\n * Loading skeleton components for DataTable\n */\n\nimport type { FunctionalComponent } from 'vue';\n\nexport interface LoadingSkeletonsProps {\n pageSize: number;\n columnKeys: string[];\n hasSelection: boolean;\n}\n\nexport const LoadingSkeletons: FunctionalComponent<LoadingSkeletonsProps> = (props) => {\n return (\n <>\n {/* Mobile Skeleton */}\n <div class=\"block md:hidden space-y-3\">\n {Array.from({ length: Math.min(props.pageSize, 5) }, (_, index) => (\n <div key={`mobile-skeleton-${index}`} class=\"card bg-base-100 shadow-sm animate-pulse\">\n <div class=\"card-body p-3 sm:p-4\">\n <div class=\"space-y-2\">\n {Array.from({ length: 4 }, (_, i) => (\n <div key={i} class=\"flex justify-between items-center\">\n <div class=\"h-3 bg-base-300 rounded w-1/4\"></div>\n <div class=\"h-3 bg-base-300 rounded w-1/2\"></div>\n </div>\n ))}\n <div class=\"flex gap-1 justify-end pt-2\">\n <div class=\"h-6 w-12 bg-base-300 rounded\"></div>\n <div class=\"h-6 w-14 bg-base-300 rounded\"></div>\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {/* Desktop Table Skeleton */}\n <div class=\"hidden md:block overflow-x-auto\">\n <table class=\"table table-zebra w-full\">\n <thead>\n <tr>\n {props.hasSelection && <th class=\"w-12\"></th>}\n {props.columnKeys.map((field) => (\n <th key={field} class=\"animate-pulse\">\n <div class=\"h-4 bg-base-300 rounded w-3/4\"></div>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: props.pageSize }, (_, index) => (\n <tr key={`skeleton-${index}`} class=\"animate-pulse\" style=\"height: 57px;\">\n {props.hasSelection && (\n <td class=\"w-12 py-4\">\n <div class=\"w-4 h-4 bg-base-300 rounded\"></div>\n </td>\n )}\n {props.columnKeys.map((field) => (\n <td key={field} class=\"py-4\">\n <div class=\"h-4 bg-base-300 rounded w-3/4\"></div>\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Skeleton Pagination Footer */}\n <div class=\"flex flex-col sm:flex-row items-center justify-between gap-4 mt-4 px-1 sm:px-2 animate-pulse\">\n <div class=\"flex items-center gap-4\">\n <div class=\"h-4 bg-base-300 rounded w-24\"></div>\n <div class=\"h-8 w-16 bg-base-300 rounded\"></div>\n <div class=\"h-4 bg-base-300 rounded w-32\"></div>\n </div>\n <div class=\"flex items-center gap-2\">\n <div class=\"h-8 w-20 bg-base-300 rounded\"></div>\n <div class=\"flex gap-1\">\n <div class=\"h-8 w-8 bg-base-300 rounded\"></div>\n <div class=\"h-8 w-8 bg-base-300 rounded\"></div>\n <div class=\"h-8 w-8 bg-base-300 rounded\"></div>\n </div>\n <div class=\"h-8 w-20 bg-base-300 rounded\"></div>\n </div>\n </div>\n </>\n );\n};\n","/**\n * Sort Drawer component for mobile DataTable\n */\n\nimport { Teleport, type FunctionalComponent, watch } from 'vue';\nimport type { FieldMetadata } from '../../../../types/fieldMetadataTypes';\nimport { getSortLabels } from '../helpers/sortHelpers';\n\nexport interface SortDrawerProps {\n isOpen: boolean;\n sortingField: string | null;\n sortingDirection: 'asc' | 'desc';\n columns: Record<string, any>;\n columnKeys: string[];\n fieldsMetadata: Record<string, FieldMetadata>;\n tableName?: string;\n onClose: () => void;\n onClearSort: () => void;\n onSort: (field: string, direction: 'asc' | 'desc') => void;\n}\n\nexport const SortDrawer: FunctionalComponent<SortDrawerProps> = (props) => {\n // Handle scroll lock when drawer is open\n watch(\n () => props.isOpen,\n (isOpen) => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n },\n );\n\n if (!props.isOpen) return null;\n\n return (\n <Teleport to=\"body\">\n <div class=\"fixed inset-0 z-50 bg-black/50\" onClick={() => props.onClose()}>\n <div\n class=\"fixed bottom-0 left-0 right-0 bg-base-100 rounded-t-lg animate-slide-up\"\n onClick={(e) => e.stopPropagation()}\n data-testid={`${props.tableName || 'datatable'}-sort-drawer`}\n >\n <div class=\"p-4\">\n {/* Drawer Header */}\n <div class=\"flex items-center justify-between mb-4\">\n <h3 class=\"text-lg font-semibold\">Sort Options</h3>\n <button class=\"btn btn-ghost btn-sm btn-circle\" onClick={() => props.onClose()}>\n ✕\n </button>\n </div>\n\n {/* Sort Options */}\n <div class=\"space-y-2 max-h-96 overflow-y-auto\">\n {/* No sorting option */}\n <button\n class={`w-full text-left p-3 rounded-lg transition-colors ${\n !props.sortingField ? 'bg-primary text-primary-content' : 'hover:bg-base-200'\n }`}\n onClick={() => {\n props.onClearSort();\n props.onClose();\n }}\n data-testid={`${props.tableName || 'datatable'}-sort-drawer-clear`}\n >\n <div class=\"font-medium\">No sorting</div>\n <div class=\"text-sm opacity-70\">Show in original order</div>\n </button>\n\n {/* Sortable columns */}\n {props.columnKeys.map((field) => {\n const column = props.columns[field];\n if (!column?.sortable || field === 'actions') return null;\n\n const labels = getSortLabels(field, column, props.fieldsMetadata);\n\n return [\n // Ascending option\n <button\n key={`${field}-asc`}\n class={`w-full text-left p-3 rounded-lg transition-colors ${\n props.sortingField === field && props.sortingDirection === 'asc'\n ? 'bg-primary text-primary-content'\n : 'hover:bg-base-200'\n }`}\n onClick={() => {\n props.onSort(field, 'asc');\n props.onClose();\n }}\n data-testid={`${props.tableName || 'datatable'}-sort-drawer-${field}-asc`}\n >\n <div class=\"font-medium\">\n {column.label}: {labels.asc}\n </div>\n </button>,\n\n // Descending option\n <button\n key={`${field}-desc`}\n class={`w-full text-left p-3 rounded-lg transition-colors ${\n props.sortingField === field && props.sortingDirection === 'desc'\n ? 'bg-primary text-primary-content'\n : 'hover:bg-base-200'\n }`}\n onClick={() => {\n props.onSort(field, 'desc');\n props.onClose();\n }}\n data-testid={`${props.tableName || 'datatable'}-sort-drawer-${field}-desc`}\n >\n <div class=\"font-medium\">\n {column.label}: {labels.desc}\n </div>\n </button>,\n ];\n })}\n </div>\n </div>\n </div>\n </div>\n </Teleport>\n );\n};\n","/**\n * Mobile Cards layout component for DataTable\n */\n\nimport type { FunctionalComponent, Slots } from 'vue';\nimport type { FieldMetadata } from '../../../../types/fieldMetadataTypes';\nimport { getSortLabels } from '../helpers/sortHelpers';\nimport { formatCellValue, renderActionItem } from '../helpers';\nimport { SortDrawer } from './SortDrawer';\n\nexport interface MobileCardsProps {\n data: any[];\n columns: Record<string, any>;\n columnKeys: string[];\n actions: any;\n hasSelection: boolean;\n selectionMode: 'none' | 'single' | 'multiple';\n isAllSelected: boolean;\n hasData: boolean;\n isLoading: boolean;\n isEmpty: boolean;\n sortingField: string | null;\n sortingDirection: 'asc' | 'desc';\n sortDrawerOpen: boolean;\n fieldsMetadata: Record<string, FieldMetadata>;\n slots: Slots;\n tableName?: string;\n isRowSelected: (row: any) => boolean;\n onSelectAll: () => void;\n onClearSelection: () => void;\n onSelectRow: (row: any) => void;\n onOpenSortDrawer: () => void;\n onCloseSortDrawer: () => void;\n onClearSort: () => void;\n onSort: (field: string, direction?: 'asc' | 'desc') => void;\n}\n\nexport const MobileCards: FunctionalComponent<MobileCardsProps> = (props) => {\n return (\n <div class=\"block md:hidden space-y-3\">\n {/* Mobile Header with Select All */}\n {props.hasSelection && props.selectionMode === 'multiple' && props.hasData && (\n <div class=\"flex items-center justify-between p-3 bg-base-200 rounded-lg\">\n <span class=\"font-medium\">Select All</span>\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n checked={props.isAllSelected}\n onChange={(e) => {\n if ((e.target as HTMLInputElement).checked) {\n props.onSelectAll();\n } else {\n props.onClearSelection();\n }\n }}\n data-testid={`${props.tableName || 'datatable'}-select-all`}\n />\n </div>\n )}\n\n {/* Loading state for mobile */}\n {props.isLoading && props.hasData && (\n <div class=\"flex items-center justify-center py-8\">\n <span class=\"loading loading-spinner loading-md\"></span>\n </div>\n )}\n\n {/* Mobile Sort Controls */}\n {props.hasData && (\n <div class=\"flex items-center justify-between p-3 bg-base-100 border border-base-300 rounded-lg\">\n <div class=\"flex items-center gap-2\">\n <span class=\"font-medium text-sm\">Sort:</span>\n {props.sortingField ? (\n <span class=\"text-sm text-base-content/70\">\n {props.columns[props.sortingField as string]?.label}:{' '}\n {getSortLabels(props.sortingField as string, props.columns[props.sortingField as string], props.fieldsMetadata)[props.sortingDirection]}\n </span>\n ) : (\n <span class=\"text-sm text-base-content/70\">None</span>\n )}\n </div>\n <button class=\"btn btn-ghost btn-sm\" onClick={props.onOpenSortDrawer} data-testid={`${props.tableName || 'datatable'}-sort-drawer`}>\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12\"\n />\n </svg>\n Change\n </button>\n </div>\n )}\n\n {/* Mobile Sort Drawer */}\n <SortDrawer\n isOpen={props.sortDrawerOpen}\n sortingField={props.sortingField}\n sortingDirection={props.sortingDirection}\n columns={props.columns}\n columnKeys={props.columnKeys}\n fieldsMetadata={props.fieldsMetadata}\n tableName={props.tableName}\n onClose={props.onCloseSortDrawer}\n onClearSort={props.onClearSort}\n onSort={props.onSort}\n />\n\n {/* Empty State for mobile */}\n {props.isEmpty && !props.isLoading && (\n <div class=\"flex flex-col items-center gap-4 py-12 text-base-content/60\">\n <svg class=\"w-16 h-16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2 2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\n />\n </svg>\n <div class=\"text-center\">\n <div class=\"text-lg font-medium\">No data found</div>\n <div class=\"text-sm mt-1\">Try adjusting your search or filters</div>\n </div>\n </div>\n )}\n\n {/* Mobile Cards */}\n {props.hasData ? (\n props.data.map((row, index) => (\n <div\n key={index}\n class={[\n 'card bg-base-100 shadow-sm border border-base-300 transition-all duration-200',\n props.isRowSelected(row) && 'ring-2 ring-primary bg-primary/5',\n ]}\n >\n <div class=\"card-body p-3\">\n {/* Selection checkbox */}\n {props.hasSelection && (\n <div class=\"flex justify-between items-start mb-2\">\n <span class=\"text-xs font-medium text-base-content/60 uppercase tracking-wide\">\n Item {index + 1}\n </span>\n <input\n type=\"checkbox\"\n class=\"checkbox checkbox-sm\"\n checked={props.isRowSelected(row)}\n onChange={() => props.onSelectRow(row)}\n data-testid={`${props.tableName || 'datatable'}-row-${index}-select`}\n />\n </div>\n )}\n\n {/* Card content */}\n <div class=\"space-y-2\">\n {props.columnKeys.map((field) => {\n // Handle actions column specially for mobile\n if (field === 'actions' && props.actions) {\n return (\n <div key=\"actions\" class=\"flex gap-1 justify-end pt-2\">\n {props.actions.items.map((action: any) => renderActionItem(action, row))}\n </div>\n );\n }\n\n const column = props.columns[field];\n if (!column) return null;\n\n const value = (row as any)[field];\n const formattedValue = formatCellValue(value, field, row, column);\n\n // Skip empty values on mobile to save space\n if (!value && value !== 0 && value !== false) return null;\n\n return (\n <div key={field} class=\"flex justify-between items-center\">\n <span class=\"text-sm font-medium text-base-content/70 min-w-0 flex-shrink-0 mr-2\">\n {column.label}:\n </span>\n <div class=\"text-sm text-right min-w-0 flex-grow\">\n {props.slots[`cell-${field}`] ? (\n props.slots[`cell-${field}`]?.({ value, row, field, formattedValue })\n ) : (\n <span class=\"break-words\">{formattedValue}</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n ))\n ) : null}\n </div>\n );\n};\n","/**\n * Pagination component for DataTable\n */\n\nimport type { FunctionalComponent } from 'vue';\n\nexport interface PaginationProps {\n currentPage: number;\n currentPageStart: number;\n currentPageEnd: number;\n totalRows?: number;\n totalPages?: number;\n hasTotal: boolean;\n pageSize: number;\n pageSizeOptions?: number[];\n canGoPrev: boolean;\n canGoNext: boolean;\n isLoading: boolean;\n tableName?: string;\n onPrevPage: () => void;\n onNextPage: () => void;\n onSetPageSize: (size: number) => void;\n}\n\nexport const Pagination: FunctionalComponent<PaginationProps> = (props) => {\n return (\n <div class=\"flex flex-col sm:flex-row items-center justify-between gap-4 mt-4 px-1 sm:px-2\">\n {/* Page size selector and row info */}\n <div class=\"flex flex-col sm:flex-row items-center gap-3 text-sm text-base-content/70 order-2 sm:order-1\">\n {/* Page size selector */}\n {props.pageSizeOptions && props.pageSizeOptions.length > 1 && (\n <div class=\"flex items-center gap-2\">\n <span class=\"hidden sm:inline\">Show</span>\n <select\n value={props.pageSize}\n onChange={(e) => props.onSetPageSize(parseInt((e.target as HTMLSelectElement).value))}\n class=\"select select-sm select-bordered\"\n disabled={props.isLoading}\n data-testid={`${props.tableName || 'datatable'}-page-size-select`}\n >\n {props.pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n <span>per page</span>\n </div>\n )}\n\n {/* Row info */}\n <div>\n {props.hasTotal ? (\n <>\n Showing {props.currentPageStart} to {props.currentPageEnd} of {props.totalRows} results\n </>\n ) : (\n <>\n Showing {props.currentPageStart} to {props.currentPageEnd} results\n </>\n )}\n </div>\n </div>\n\n {/* Pagination controls */}\n <div class=\"join order-1 sm:order-2\">\n <button\n class=\"join-item btn btn-sm\"\n disabled={!props.canGoPrev}\n onClick={() => props.onPrevPage()}\n data-testid={`${props.tableName || 'datatable'}-page-prev`}\n >\n <span class=\"hidden sm:inline\">Previous</span>\n <span class=\"sm:hidden\">‹</span>\n </button>\n\n <button class=\"join-item btn btn-sm btn-active\">\n {props.hasTotal ? (\n <>\n <span class=\"hidden sm:inline\">\n Page {props.currentPage + 1} of {props.totalPages}\n </span>\n <span class=\"sm:hidden\">\n {props.currentPage + 1}/{props.totalPages}\n </span>\n </>\n ) : (\n <>\n <span class=\"hidden sm:inline\">Page {props.currentPage + 1}</span>\n <span class=\"sm:hidden\">{props.currentPage + 1}</span>\n </>\n )}\n </button>\n\n <button\n class=\"join-item btn btn-sm\"\n disabled={!props.canGoNext}\n onClick={() => props.onNextPage()}\n data-testid={`${props.tableName || 'datatable'}-page-next`}\n >\n <span class=\"hidden sm:inline\">Next</span>\n <span class=\"sm:hidden\">›</span>\n </button>\n </div>\n </div>\n );\n};\n","/**\n * Search input component for DataTable\n */\n\nimport type { FunctionalComponent, Ref } from 'vue';\nimport { debounce } from '../helpers/debounce';\n\nexport interface SearchInputProps {\n searchableFields: string[];\n isLoading: boolean;\n searchInputValue: Ref<string>;\n tableName?: string;\n onSearch: (query: string) => void;\n onClearSearch: () => void;\n}\n\nexport const SearchInput: FunctionalComponent<SearchInputProps> = (props) => {\n return (\n <div class=\"mb-4\">\n <div class=\"relative\">\n <input\n value={props.searchInputValue.value}\n onInput={(e) => {\n const query = (e.target as HTMLInputElement).value;\n // Update the input value immediately for responsive UI\n props.searchInputValue.value = query;\n\n // Debounced search\n debounce('search', () => {\n props.onSearch(query);\n }, 300);\n }}\n onKeydown={(e) => {\n // Handle clear on Escape key\n if (e.key === 'Escape' && props.searchInputValue.value) {\n e.preventDefault();\n props.searchInputValue.value = '';\n props.onClearSearch();\n }\n }}\n placeholder={`Search ${props.searchableFields.join(', ')}...`}\n class=\"input input-bordered w-full pr-10\"\n data-testid={`${props.tableName || 'datatable'}-search-input`}\n />\n {props.isLoading && (\n <div class=\"absolute right-3 top-1/2 -translate-y-1/2\">\n <span class=\"loading loading-spinner loading-sm\"></span>\n </div>\n )}\n {props.searchInputValue.value && !props.isLoading && (\n <button\n class=\"absolute right-3 top-1/2 -translate-y-1/2 btn btn-ghost btn-xs\"\n onClick={() => {\n props.searchInputValue.value = '';\n props.onClearSearch();\n }}\n data-testid={`${props.tableName || 'datatable'}-search-clear`}\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n );\n};\n","/**\n * Selection Actions component for DataTable\n */\n\nimport type { FunctionalComponent, Slots } from 'vue';\n\nexport interface SelectionActionsProps {\n hasSelection: boolean;\n selectedCount: number;\n selectedRows: any[];\n slots: Slots;\n tableName?: string;\n onClearSelection: () => void;\n triggerBulkAction: (actionKey: string) => void;\n}\n\nexport const SelectionActions: FunctionalComponent<SelectionActionsProps> = (props) => {\n return (\n <div class=\"border border-base-300 rounded-lg bg-base-50 mb-4 p-3 sm:p-4\">\n <div class=\"flex flex-col sm:flex-row gap-2 sm:gap-3 sm:items-center sm:justify-between\">\n {/* Selection count info */}\n <div class=\"text-sm text-base-content/70 order-2 sm:order-1\">\n {props.hasSelection ? (\n <span>\n {props.selectedCount} item{props.selectedCount !== 1 ? 's' : ''} selected\n </span>\n ) : (\n <span>Select items to enable actions</span>\n )}\n </div>\n\n {/* Actions dropdown */}\n <div class=\"dropdown dropdown-end order-1 sm:order-2\">\n <div\n tabindex=\"0\"\n role=\"button\"\n class={[\n 'btn w-full sm:w-auto min-h-[44px] sm:min-h-[36px]',\n props.hasSelection ? 'btn-primary' : 'btn-outline opacity-50',\n ]}\n {...(props.hasSelection ? {} : { disabled: true })}\n >\n <svg class=\"w-4 h-4 mr-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z\"\n />\n </svg>\n <span>Actions</span>\n <svg class=\"w-4 h-4 ml-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n <ul\n tabindex=\"0\"\n class=\"dropdown-content menu bg-base-100 rounded-box z-[1] w-64 p-2 shadow-lg border border-base-300\"\n >\n {props.slots['selection-actions']?.({\n selectedItems: props.selectedRows,\n selectedCount: props.selectedCount,\n clearSelection: props.onClearSelection,\n triggerBulkAction: props.triggerBulkAction,\n hasSelection: props.hasSelection,\n })}\n <li class=\"border-t border-base-300 mt-2 pt-2\">\n <a onClick={() => props.onClearSelection()} data-testid={`${props.tableName || 'datatable'}-selection-clear`}>\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n Clear Selection\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n );\n};\n","/**\n * DaisyUI DataTable Component - Refactored with modular components\n */\n\nimport { computed, type FunctionalComponent, inject, type Ref } from 'vue';\nimport type { ActionsConfig, DataTableColumns, DataTableOptions, ZiniaDataTable } from '../../useDataTable';\n\n// Define the slots interface for proper typing\ninterface DataTableSlots<TData> {\n [key: `cell-${string}`]: (props: {\n value: any;\n row: TData;\n field: string;\n formattedValue: string;\n }) => any;\n 'selection-actions': (props: {\n hasSelection: boolean;\n selectedCount: number;\n selectedRows: TData[];\n onClearSelection: () => void;\n triggerBulkAction: (action: string) => void;\n }) => any;\n default: () => any;\n}\nimport {\n ZINIA_DATA_TABLE_ACTIONS_KEY,\n ZINIA_DATA_TABLE_COLUMNS_KEY,\n ZINIA_DATA_TABLE_FILTER_INPUTS_KEY,\n ZINIA_DATA_TABLE_FILTER_OPERATORS_KEY,\n ZINIA_DATA_TABLE_FILTER_OPTIONS_STATE_KEY,\n ZINIA_DATA_TABLE_FILTER_OPTIONS_LOADING_KEY,\n ZINIA_DATA_TABLE_KEY,\n ZINIA_DATA_TABLE_NAME_KEY,\n ZINIA_DATA_TABLE_OPTIONS_KEY,\n ZINIA_DATA_TABLE_SEARCH_INPUT_KEY,\n} from '../../useDataTable';\nimport type { DataTableProps } from '../types/DataTableProps';\nimport { DesktopTable } from './datatable/components/DesktopTable';\nimport { FiltersRow } from './datatable/components/FiltersRow';\nimport { LoadingSkeletons } from './datatable/components/LoadingSkeletons';\nimport { MobileCards } from './datatable/components/MobileCards';\nimport { Pagination } from './datatable/components/Pagination';\nimport { SearchInput } from './datatable/components/SearchInput';\nimport { SelectionActions } from './datatable/components/SelectionActions';\nimport { ErrorDisplay } from './ErrorDisplay';\nimport { getFilterType } from './datatable/helpers';\n\nexport function createDaisyUIDataTable<FormType>() {\n const DaisyUIDataTable: FunctionalComponent<\n DataTableProps<FormType>,\n {}, // Emits (empty object)\n DataTableSlots<FormType> // Slots interface\n > = (props, { slots }) => {\n const table = inject<ZiniaDataTable<any>>(ZINIA_DATA_TABLE_KEY);\n const columns = inject<DataTableColumns<any>>(ZINIA_DATA_TABLE_COLUMNS_KEY);\n const options = inject<DataTableOptions<any>>(ZINIA_DATA_TABLE_OPTIONS_KEY);\n const actions = inject<ActionsConfig<any>>(ZINIA_DATA_TABLE_ACTIONS_KEY);\n const searchInputValue = inject<Ref<string>>(ZINIA_DATA_TABLE_SEARCH_INPUT_KEY);\n const filterInputValues = inject<Ref<Record<string, string>>>(ZINIA_DATA_TABLE_FILTER_INPUTS_KEY);\n const filterOperators = inject<Ref<Record<string, import('../../useDataTable').FilterValue['operator']>>>(ZINIA_DATA_TABLE_FILTER_OPERATORS_KEY);\n const filterOptionsState = inject<Ref<Record<string, any[]>>>(ZINIA_DATA_TABLE_FILTER_OPTIONS_STATE_KEY);\n const filterOptionsLoading = inject<Ref<Record<string, boolean>>>(ZINIA_DATA_TABLE_FILTER_OPTIONS_LOADING_KEY);\n const tableName = inject<string>(ZINIA_DATA_TABLE_NAME_KEY);\n\n if (!table) {\n console.error(\n 'DataTableDaisy: table context not found. Make sure you are using useDataTable with autoProvide enabled.',\n );\n return () => null;\n }\n\n if (!columns) {\n console.error('DataTableDaisy: columns context not found.');\n return () => null;\n }\n\n if (!options) {\n console.error('DataTableDaisy: options context not found.');\n return () => null;\n }\n\n // Computed values\n const columnKeys = computed(() => {\n const keys = Object.keys(columns);\n // Add actions column if actions are configured\n if (actions?.items && actions.items.length > 0) {\n return [...keys, 'actions'];\n }\n return keys;\n });\n\n const selectionMode = computed(() => options.selection?.mode ?? 'none');\n const hasSelection = computed(() => selectionMode.value !== 'none');\n\n // Initialize filter input values and operators only once on first render\n if (filterInputValues && Object.keys(filterInputValues.value).length === 0) {\n Object.entries(columns).forEach(([field, column]) => {\n if (column?.filterable) {\n const filterType = getFilterType(field, column, table.fieldsMetadata);\n if (filterType === 'text' || filterType === 'number') {\n const currentFilter = table.filters.active[field];\n filterInputValues.value[field] = currentFilter?.value || '';\n\n // Initialize default operators\n if (filterOperators) {\n if (filterType === 'text') {\n filterOperators.value[field] = currentFilter?.operator || 'contains';\n } else if (filterType === 'number') {\n filterOperators.value[field] = currentFilter?.operator || 'eq';\n }\n }\n }\n }\n });\n }\n\n const handleSort = (field: string) => {\n // Prevent sorting when already loading\n if (table.isLoading) return;\n\n const column = columns[field];\n if (column?.sortable) {\n table.sort(field);\n }\n };\n\n return (\n <div class={props.class}>\n {/* Search Input - Always at the top when search is enabled */}\n {options.search?.searchableFields && options.search.searchableFields.length > 0 && searchInputValue && (\n <SearchInput\n searchableFields={table.search.searchableFields as string[]}\n isLoading={table.isLoading}\n searchInputValue={searchInputValue}\n tableName={tableName}\n onSearch={(query) => table.setSearch(query)}\n onClearSearch={() => {\n searchInputValue.value = '';\n table.clearSearch();\n }}\n />\n )}\n\n {/* Filters Row - Show when any columns have filters */}\n {Object.values(columns).some((col) => col?.filterable) && filterInputValues && filterOperators && (\n <FiltersRow\n columns={columns}\n activeFilters={table.filters.active}\n filterInputValues={filterInputValues}\n filterOperators={filterOperators}\n filterOptionsState={filterOptionsState}\n filterOptionsLoading={filterOptionsLoading}\n fieldsMetadata={table.fieldsMetadata}\n isLoading={table.isLoading}\n filterCount={table.filters.count}\n onFilterChange={(field, value, operator) => table.setFilter(field as keyof any, value, operator)}\n onClearAllFilters={() => table.clearAllFilters()}\n onRefresh={() => table.refresh()}\n />\n )}\n\n {/* Selection Actions Dropdown - Only show if custom actions provided */}\n {hasSelection.value && slots['selection-actions'] && (\n <SelectionActions\n hasSelection={table.selection.hasSelection}\n selectedCount={table.selection.selectedCount}\n selectedRows={table.selection.selectedRows}\n slots={slots}\n onClearSelection={() => table.clearSelection()}\n triggerBulkAction={table.triggerBulkAction}\n />\n )}\n\n {/* Show skeleton while loading */}\n {table.isLoading ? (\n <LoadingSkeletons\n pageSize={table.pagination.pageSize}\n columnKeys={columnKeys.value}\n hasSelection={hasSelection.value}\n />\n ) : table.hasError ? (\n /* Show error state */\n <div class=\"mt-4\">\n <ErrorDisplay error={table.error || 'An error occurred while loading data'} />\n <div class=\"mt-4 flex justify-center\">\n <button\n onClick={() => table.refresh()}\n class=\"btn btn-primary\"\n >\n <svg class=\"w-4 h-4 mr-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"\n />\n </svg>\n Try Again\n </button>\n </div>\n </div>\n ) : (\n <>\n {/* Mobile Card Layout */}\n <MobileCards\n data={table.data}\n columns={columns}\n columnKeys={columnKeys.value}\n actions={actions}\n hasSelection={hasSelection.value}\n selectionMode={selectionMode.value}\n isAllSelected={table.selection.isAllSelected}\n hasData={table.hasData}\n isLoading={table.isLoading}\n isEmpty={table.isEmpty}\n sortingField={table.sorting.field as string | null}\n sortingDirection={table.sorting.direction}\n sortDrawerOpen={table.ui.sortDrawerOpen.value}\n fieldsMetadata={table.fieldsMetadata}\n slots={slots}\n tableName={tableName}\n isRowSelected={(row) => table.isRowSelected(row)}\n onSelectAll={() => table.selectAll()}\n onClearSelection={() => table.clearSelection()}\n onSelectRow={(row) => table.selectRow(row)}\n onOpenSortDrawer={() => table.ui.openSortDrawer()}\n onCloseSortDrawer={() => table.ui.closeSortDrawer()}\n onClearSort={() => table.clearSort()}\n onSort={(field, direction) => table.sort(field, direction)}\n />\n\n {/* Desktop Table Layout */}\n <DesktopTable\n data={table.data}\n columns={columns}\n columnKeys={columnKeys.value}\n actions={actions}\n hasSelection={hasSelection.value}\n selectionMode={selectionMode.value}\n isAllSelected={table.selection.isAllSelected}\n hasData={table.hasData}\n isLoading={table.isLoading}\n isEmpty={table.isEmpty}\n sortingField={table.sorting.field as string | null}\n sortingDirection={table.sorting.direction}\n slots={slots}\n tableName={tableName}\n isRowSelected={(row) => table.isRowSelected(row)}\n onSelectAll={() => table.selectAll()}\n onClearSelection={() => table.clearSelection()}\n onSelectRow={(row) => table.selectRow(row)}\n onSort={(field) => handleSort(field)}\n />\n\n {/* Responsive Pagination Footer */}\n {table.hasData && !table.isLoading && (\n <Pagination\n currentPage={table.pagination.currentPage}\n currentPageStart={table.pagination.currentPageStart}\n currentPageEnd={table.pagination.currentPageEnd}\n totalRows={table.pagination.totalRows}\n totalPages={table.pagination.totalPages}\n hasTotal={table.pagination.hasTotal}\n pageSize={table.pagination.pageSize}\n pageSizeOptions={options.pagination?.pageSizeOptions}\n canGoPrev={table.pagination.canGoPrev}\n canGoNext={table.pagination.canGoNext}\n isLoading={table.isLoading}\n tableName={tableName}\n onPrevPage={() => table.prevPage()}\n onNextPage={() => table.nextPage()}\n onSetPageSize={(size) => table.setPageSize(size)}\n />\n )}\n </>\n )}\n </div>\n );\n };\n\n // Define props\n DaisyUIDataTable.props = ['class'];\n\n return DaisyUIDataTable;\n}\n","/**\n * DaisyUI style package\n * Provides all component creators for the DaisyUI style\n */\n\nimport * as daisy_ui from '../fields/daisy_ui';\nimport type { StyleCreators } from '../types/styleCreators';\n\n/**\n * Complete set of DaisyUI style creators\n * Can be registered with the Zinia plugin\n */\nexport const daisyUIStyle: StyleCreators = {\n createForm: daisy_ui.createDaisyUIForm,\n createSubmitButton: daisy_ui.createDaisyUISubmitButton,\n createResetButton: daisy_ui.createDaisyUIResetButton,\n createTextField: daisy_ui.createDaisyUITextField,\n createNumberField: daisy_ui.createDaisyUINumberField,\n createCurrencyField: daisy_ui.createDaisyUICurrencyField,\n createSelectField: daisy_ui.createDaisyUISelectField,\n createCheckboxField: daisy_ui.createDaisyUICheckboxField,\n createTextareaField: daisy_ui.createDaisyUITextareaField,\n createRadioField: daisy_ui.createDaisyUIRadioField,\n createPasswordField: daisy_ui.createDaisyUIPasswordField,\n createEmailField: daisy_ui.createDaisyUIEmailField,\n createDateField: daisy_ui.createDaisyUIDateField,\n createTelField: daisy_ui.createDaisyUITelField,\n createFileField: daisy_ui.createDaisyUIFileField,\n createRangeField: daisy_ui.createDaisyUIRangeField,\n createUrlField: daisy_ui.createDaisyUIUrlField,\n createSearchField: daisy_ui.createDaisyUISearchField,\n createTimeField: daisy_ui.createDaisyUITimeField,\n createDateTimeLocalField: daisy_ui.createDaisyUIDateTimeLocalField,\n createArrayField: daisy_ui.createDaisyUIArrayField,\n createTransferListField: daisy_ui.createDaisyUITransferListField,\n createToppingsField: daisy_ui.createDaisyUIToppingsField,\n createFormErrorsSummary: daisy_ui.createDaisyUIFormErrorsSummary,\n createDisplay: daisy_ui.createDaisyUIDisplay,\n createDisplayField: daisy_ui.createDaisyUIDisplayField,\n createDeleteModal: daisy_ui.createDaisyUIDeleteModal,\n createDataTable: daisy_ui.createDaisyUIDataTable,\n};\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { CheckboxFieldProps } from '../types/CheckboxFieldProps';\n\n// Plain checkbox field component\nexport function createPlainCheckboxField<FormType>() {\n const PlainCheckboxField: FunctionalComponent<CheckboxFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('CheckboxField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'checkbox',\n checked: Boolean(formState.getValue(props.name)),\n onChange: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.checked);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n ...attrs,\n };\n\n // Return just the input element\n return <input class={props.class} disabled={props.disabled} readonly={props.readonly} data-testid={`${formState.storeName}-checkbox-field-${String(props.name)}`} {...inputProps} />;\n };\n\n // Define props\n PlainCheckboxField.props = [\n 'name',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return PlainCheckboxField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { NumberFieldProps } from '../types/NumberFieldProps';\n\n// Plain number field component\nexport function createPlainCurrencyField<FormType>() {\n const PlainCurrencyField: FunctionalComponent<NumberFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('CurrencyField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'number',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n min={props.min}\n max={props.max}\n step={props.step}\n data-testid={`${formState.storeName}-currency-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainCurrencyField.props = [\n 'name',\n 'label',\n 'hideLabel',\n 'placeholder',\n 'min',\n 'max',\n 'step',\n 'disabled',\n 'readonly',\n 'class',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return PlainCurrencyField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { DateFieldProps } from '../types/DateFieldProps';\nimport { formatDateValue } from '../utils/formatDateValue';\n\n// Plain date field component\nexport function createPlainDateField<FormType>() {\n const PlainDateField: FunctionalComponent<DateFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('DateField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'date',\n value: formatDateValue(formState.getValue(props.name)),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // Convert the string value to a Date object if it's not empty\n const dateValue = target.value ? new Date(target.value) : null;\n formState.setValue(props.name, dateValue);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n min={props.min}\n max={props.max}\n data-testid={`${formState.storeName}-date-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainDateField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'min',\n 'max',\n ];\n\n return PlainDateField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { DateTimeLocalFieldProps } from '../types/DateTimeLocalFieldProps';\nimport { formatDateTimeValue } from '../utils/formatDateTimeValue';\n\n// Plain datetime-local field component\nexport function createPlainDateTimeLocalField<FormType>() {\n const PlainDateTimeLocalField: FunctionalComponent<DateTimeLocalFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('DateTimeLocalField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'datetime-local',\n value: formatDateTimeValue(formState.getValue(props.name)),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // Convert the string value to a Date object if it's not empty\n const dateTimeValue = target.value ? new Date(target.value) : null;\n formState.setValue(props.name, dateTimeValue);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n min: props.min,\n max: props.max,\n step: props.step,\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-datetime-local-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainDateTimeLocalField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'min',\n 'max',\n 'step',\n ];\n\n return PlainDateTimeLocalField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { EmailFieldProps } from '../types/EmailFieldProps';\n\n// Plain email field component\nexport function createPlainEmailField<FormType>() {\n const PlainEmailField: FunctionalComponent<EmailFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('EmailField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'email',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n autocomplete: props.autocomplete || 'email',\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-email-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainEmailField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return PlainEmailField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { FileFieldProps } from '../types/FileFieldProps';\n\n// Plain file field component\nexport function createPlainFileField<FormType>() {\n const PlainFileField: FunctionalComponent<FileFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('FileField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'file',\n onChange: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // Store FileList in form state\n formState.setValue(props.name, target.files);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n accept: props.accept,\n multiple: props.multiple,\n ...attrs,\n };\n\n // Return just the input element\n return <input class={props.class} disabled={props.disabled} readonly={props.readonly} data-testid={`${formState.storeName}-file-field-${String(props.name)}`} {...inputProps} />;\n };\n\n // Define props\n PlainFileField.props = [\n 'name',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'accept',\n 'multiple',\n ];\n\n return PlainFileField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { FormProps } from '../types/FormProps';\n\n// Plain styled form component\nexport function createPlainForm<FormType>() {\n const PlainForm: FunctionalComponent<FormProps<FormType>> = (props, { slots }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('Form: formState is required but was not injected');\n return null;\n }\n\n // Handle form submission\n const handleSubmit = async (event: Event) => {\n event.preventDefault();\n\n // Increment submission attempts count\n formState.incrementSubmitAttempts();\n\n props.onBeforeValidate?.();\n\n // Validate all fields (marks all fields as touched and validates them)\n if (!formState.validate()) {\n return;\n }\n\n // Set submitting state\n formState.setSubmitting(true);\n\n try {\n let result;\n\n // Use custom submit handler if provided, otherwise just return the form data\n if (props.onHandleSubmit) {\n result = await props.onHandleSubmit(formState.values as FormType);\n } else {\n result = formState.values;\n }\n\n // Call onSuccess hook if provided\n if (props.onSuccess) {\n props.onSuccess(result);\n }\n\n return result;\n } catch (error) {\n // Call onError hook if provided\n if (props.onError) {\n props.onError(error);\n }\n console.error('Form submission error:', error);\n } finally {\n formState.setSubmitting(false);\n }\n };\n\n // Render the form\n return (\n <form onSubmit={handleSubmit} novalidate class={props.className || 'zinia-form'}>\n {/* Form content from slots */}\n {slots.default && slots.default()}\n </form>\n );\n };\n\n return PlainForm;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { NumberFieldProps } from '../types/NumberFieldProps';\n\n// Plain number field component\nexport function createPlainNumberField<FormType>() {\n const PlainNumberField: FunctionalComponent<NumberFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('NumberField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'number',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // Convert the string value to a number\n const numValue = target.value === '' ? null : Number(target.value);\n formState.setValue(props.name, numValue);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n min={props.min}\n max={props.max}\n step={props.step}\n data-testid={`${formState.storeName}-number-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainNumberField.props = [\n 'name',\n 'label',\n 'hideLabel',\n 'placeholder',\n 'min',\n 'max',\n 'step',\n 'disabled',\n 'readonly',\n 'class',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return PlainNumberField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { PasswordFieldProps } from '../types/PasswordFieldProps';\n\n// Plain password field component\nexport function createPlainPasswordField<FormType>() {\n const PlainPasswordField: FunctionalComponent<PasswordFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('PasswordField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'password',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n autocomplete: props.autocomplete || 'current-password',\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-password-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainPasswordField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return PlainPasswordField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { RadioFieldProps } from '../types/RadioFieldProps';\n\n// Plain radio field component\nexport function createPlainRadioField<FormType>() {\n const PlainRadioField: FunctionalComponent<RadioFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('RadioField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n const options = props.options || fieldMetadata.options || [];\n const currentValue = formState.getValue(props.name);\n\n // Create a radio button for each option\n return (\n <div class={props.class}>\n {options.map((option) => (\n <input\n type=\"radio\"\n key={option.value}\n value={option.value}\n checked={currentValue === option.value}\n onChange={() => formState.setValue(props.name, option.value)}\n onBlur={() => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n }}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-radio-field-${String(props.name)}-${option.value}`}\n {...attrs}\n />\n ))}\n </div>\n );\n };\n\n // Define props\n PlainRadioField.props = [\n 'name',\n 'options',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'inline',\n ];\n\n return PlainRadioField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { RangeFieldProps } from '../types/RangeFieldProps';\n\n// Plain range field component\nexport function createPlainRangeField<FormType>() {\n const PlainRangeField: FunctionalComponent<RangeFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('RangeField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'range',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n // Convert the string value to a number\n const numValue = target.value === '' ? null : Number(target.value);\n formState.setValue(props.name, numValue);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n min: props.min,\n max: props.max,\n step: props.step,\n ...attrs,\n };\n\n // Return just the input element\n return <input class={props.class} disabled={props.disabled} readonly={props.readonly} data-testid={`${formState.storeName}-range-field-${String(props.name)}`} {...inputProps} />;\n };\n\n // Define props\n PlainRangeField.props = [\n 'name',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'min',\n 'max',\n 'step',\n 'showValue',\n ];\n\n return PlainRangeField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { ResetButtonProps } from '../types/ResetButtonProps';\n\n// Plain styled reset button component\nexport function createPlainResetButton<FormType>() {\n const PlainResetButton: FunctionalComponent<ResetButtonProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('ResetButton: formState is required but was not injected');\n return null;\n }\n\n // Determine reset button text\n const resetText = props.resetText || 'Reset';\n\n // Compute button classes\n const buttonClass = ['reset-button', props.className].filter(Boolean).join(' ');\n\n // Handle reset button click\n const handleReset = () => {\n // Reset the form to initial values\n formState.reset();\n\n // Call custom onReset handler if provided\n if (props.onReset) {\n props.onReset();\n }\n };\n\n return (\n <div class=\"form-reset\">\n <button\n type=\"button\"\n class={buttonClass}\n disabled={formState.isSubmitting || props.disabled}\n onClick={handleReset}\n data-testid={`${formState.storeName}-reset-button`}\n {...attrs}\n >\n {resetText}\n </button>\n </div>\n );\n };\n\n return PlainResetButton;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { SearchFieldProps } from '../types/SearchFieldProps';\n\n// Plain search field component\nexport function createPlainSearchField<FormType>() {\n const PlainSearchField: FunctionalComponent<SearchFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('SearchField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'search',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n autocomplete: props.autocomplete,\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-search-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainSearchField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return PlainSearchField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { SelectFieldProps } from '../types/SelectFieldProps';\nimport { SELECT_FIELD_PROP_NAMES } from '../types/SelectFieldProps';\nimport { filterComponentPropsFromAttrs, normalizePropsFromAttrs } from '../../utils/propNormalization';\n\n// Plain select field component\nexport function createPlainSelectField<FormType>() {\n // Use props array derived from SelectFieldProps interface - ensures type safety and single source of truth\n const propsDefinition = [...SELECT_FIELD_PROP_NAMES] as string[];\n\n const PlainSelectField: FunctionalComponent<SelectFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('SelectField: formState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = formState.fieldsMetadata[props.name] || {};\n\n // Normalize props from attrs (handles kebab-case -> camelCase conversion)\n const normalizedProps = normalizePropsFromAttrs(\n props,\n propsDefinition,\n attrs,\n );\n\n const options = normalizedProps.selectOptions || fieldMetadata.options || [];\n\n // Filter out component props from attrs to prevent them from being rendered as DOM attributes\n const htmlAttrs = filterComponentPropsFromAttrs(\n propsDefinition,\n attrs,\n );\n\n // Create the select props\n const selectProps = {\n value: formState.getValue(props.name),\n onChange: (event: Event) => {\n const target = event.target as HTMLSelectElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n ...htmlAttrs,\n };\n\n // Return just the select element\n return (\n <select class={props.class} disabled={props.disabled} data-testid={`${formState.storeName}-select-field-${String(props.name)}`} {...selectProps}>\n {props.placeholder && (\n <option value=\"\" disabled selected>\n {props.placeholder}\n </option>\n )}\n {options.map((option: { value: string; label: string }) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n };\n\n // Assign props definition to component\n PlainSelectField.props = propsDefinition;\n\n return PlainSelectField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { SubmitButtonProps } from '../types/SubmitButtonProps';\n\n// Plain styled submit button component\nexport function createPlainSubmitButton<FormType>() {\n const PlainSubmitButton: FunctionalComponent<SubmitButtonProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('SubmitButton: formState is required but was not injected');\n return null;\n }\n\n // Determine submit button text\n const submitText = props.submitText || 'Submit';\n const submittingText = props.submittingText || 'Submitting...';\n\n // Compute button classes\n const buttonClass = ['submit-button', props.className].filter(Boolean).join(' ');\n\n // Only disable the button if validation has been attempted and failed\n // or if the form is currently submitting\n const shouldDisable =\n (formState.hasAttemptedSubmit && !formState.isValid) || formState.isSubmitting || props.disabled;\n\n return (\n <div class=\"form-submit\">\n <button type=\"submit\" class={buttonClass} disabled={shouldDisable} data-testid={`${formState.storeName}-submit-button`} {...attrs}>\n {formState.isSubmitting ? submittingText : submitText}\n </button>\n </div>\n );\n };\n\n return PlainSubmitButton;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { TelFieldProps } from '../types/TelFieldProps';\n\n// Plain tel field component\nexport function createPlainTelField<FormType>() {\n const PlainTelField: FunctionalComponent<TelFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('TelField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'tel',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n autocomplete: props.autocomplete || 'tel',\n pattern: props.pattern,\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-tel-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainTelField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'pattern',\n ];\n\n return PlainTelField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { TextareaFieldProps } from '../types/TextareaFieldProps';\n\n// Plain textarea field component\nexport function createPlainTextareaField<FormType>() {\n const PlainTextareaField: FunctionalComponent<TextareaFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('TextareaField: formState is required but was not injected');\n return null;\n }\n\n // Create the textarea props\n const textareaProps = {\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLTextAreaElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n ...attrs,\n };\n\n // Return just the textarea element\n return (\n <textarea\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n rows={props.rows}\n data-testid={`${formState.storeName}-textarea-field-${String(props.name)}`}\n {...textareaProps}\n />\n );\n };\n\n // Define props\n PlainTextareaField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'rows',\n ];\n\n return PlainTextareaField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { TextFieldProps } from '../types/TextFieldProps';\n\n// Plain text field component\nexport function createPlainTextField<FormType>() {\n const PlainTextField: FunctionalComponent<TextFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('TextField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'text',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n autocomplete: props.autocomplete,\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-text-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainTextField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n ];\n\n return PlainTextField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { TimeFieldProps } from '../types/TimeFieldProps';\n\n// Plain time field component\nexport function createPlainTimeField<FormType>() {\n const PlainTimeField: FunctionalComponent<TimeFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('TimeField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'time',\n value: formatTimeValue(formState.getValue(props.name)),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n min: props.min,\n max: props.max,\n step: props.step,\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-time-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainTimeField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'min',\n 'max',\n 'step',\n ];\n\n return PlainTimeField;\n}\nfunction formatTimeValue(_arg0: any) {\n throw new Error('Function not implemented.');\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaForm } from '../../useForm';\nimport type { UrlFieldProps } from '../types/UrlFieldProps';\n\n// Plain url field component\nexport function createPlainUrlField<FormType>() {\n const PlainUrlField: FunctionalComponent<UrlFieldProps<FormType>> = (props, { attrs }) => {\n // Inject formState with proper typing\n const formState = inject<ZiniaForm>('formState');\n\n if (!formState) {\n console.error('UrlField: formState is required but was not injected');\n return null;\n }\n\n // Create the input props\n const inputProps = {\n type: 'url',\n value: formState.getValue(props.name),\n onInput: (event: Event) => {\n const target = event.target as HTMLInputElement;\n formState.setValue(props.name, target.value);\n },\n onBlur: () => {\n formState.touchField(props.name);\n formState.validateField(props.name);\n },\n autocomplete: props.autocomplete || 'url',\n pattern: props.pattern,\n ...attrs,\n };\n\n // Return just the input element\n return (\n <input\n class={props.class}\n placeholder={props.placeholder}\n disabled={props.disabled}\n readonly={props.readonly}\n data-testid={`${formState.storeName}-url-field-${String(props.name)}`}\n {...inputProps}\n />\n );\n };\n\n // Define props\n PlainUrlField.props = [\n 'name',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'autocomplete',\n 'class',\n 'label',\n 'hideLabel',\n 'description',\n 'required',\n 'size',\n 'variant',\n 'pattern',\n ];\n\n return PlainUrlField;\n}\n","import { type FunctionalComponent, inject } from 'vue';\nimport type { ZiniaDisplay } from '../../useDisplay';\nimport { ZINIA_DISPLAY_KEY } from '../../useDisplay';\nimport type { DisplayProps } from '../types/DisplayProps';\n\n// Plain styled display wrapper component\nexport function createPlainDisplay<FormType>() {\n const PlainDisplay: FunctionalComponent<DisplayProps<FormType>> = (props, { slots }) => {\n // Inject display state with proper typing\n const displayState = inject<ZiniaDisplay>(ZINIA_DISPLAY_KEY);\n\n if (!displayState) {\n console.error('Display: displayState is required but was not injected');\n return null;\n }\n\n // Handle loading state\n if (props.loading) {\n return (\n <div style=\"display: flex; align-items: center; justify-content: center; padding: 2rem;\">\n <span>Loading...</span>\n </div>\n );\n }\n\n // Handle error state\n if (props.error) {\n return (\n <div style=\"padding: 1rem; border: 1px solid #ef4444; background-color: #fef2f2; border-radius: 0.375rem; color: #dc2626;\">\n <strong>Error:</strong> {props.error}\n </div>\n );\n }\n\n // Get data from injected display state\n const data = displayState.data;\n if (!data) {\n return (\n <div style=\"padding: 1rem; border: 1px solid #3b82f6; background-color: #eff6ff; border-radius: 0.375rem; color: #1d4ed8;\">\n <strong>Info:</strong> No data to display\n </div>\n );\n }\n\n // Compute wrapper styles based on layout\n const getWrapperStyle = () => {\n const baseStyle = 'display: flex; gap: 1rem;';\n \n switch (props.layout) {\n case 'grid':\n return `display: grid; gap: 1rem; ${props.columns ? `grid-template-columns: repeat(${props.columns}, 1fr);` : ''}`;\n case 'horizontal':\n return `${baseStyle} flex-wrap: wrap;`;\n case 'vertical':\n default:\n return `${baseStyle} flex-direction: column;`;\n }\n };\n\n const wrapperStyle = getWrapperStyle();\n\n return (\n <div class=\"zinia-display\" style={wrapperStyle} data-testid=\"display-container\">\n {slots.default?.()}\n </div>\n );\n };\n\n // Define props\n PlainDisplay.props = [\n 'loading',\n 'error',\n 'class',\n 'variant',\n 'showLabels',\n 'layout',\n 'columns',\n ];\n\n return PlainDisplay;\n}","import { type FunctionalComponent, inject, computed } from 'vue';\nimport type { ZiniaDisplay } from '../../useDisplay';\nimport { ZINIA_DISPLAY_KEY } from '../../useDisplay';\nimport type { DisplayFieldProps } from '../types/DisplayFieldProps';\n\n// Plain styled display field component\nexport function createPlainDisplayField<FormType>() {\n const PlainDisplayField: FunctionalComponent<DisplayFieldProps<FormType>> = (props, { attrs }) => {\n // Inject display state\n const displayState = inject<ZiniaDisplay>(ZINIA_DISPLAY_KEY);\n\n if (!displayState) {\n console.error('DisplayField: displayState is required but was not injected');\n return null;\n }\n\n const fieldMetadata = displayState.fieldsMetadata[props.name] || {};\n \n // Get the raw value\n const rawValue = displayState.getValue(props.name);\n \n // Format the value based on the format prop\n const formattedValue = computed(() => {\n if (rawValue === null || rawValue === undefined || rawValue === '') {\n return props.emptyText || '—';\n }\n\n switch (props.format) {\n case 'currency':\n if (typeof rawValue === 'number') {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n }).format(rawValue);\n }\n return rawValue;\n\n case 'date':\n if (rawValue instanceof Date || typeof rawValue === 'string') {\n const date = new Date(rawValue);\n return date.toLocaleDateString();\n }\n return rawValue;\n\n case 'datetime':\n if (rawValue instanceof Date || typeof rawValue === 'string') {\n const date = new Date(rawValue);\n return date.toLocaleString();\n }\n return rawValue;\n\n case 'boolean':\n return rawValue ? 'Yes' : 'No';\n\n case 'email':\n return rawValue;\n\n case 'url':\n return rawValue;\n\n case 'phone':\n if (typeof rawValue === 'string') {\n // Basic phone formatting\n const cleaned = rawValue.replace(/\\D/g, '');\n const match = cleaned.match(/^(\\d{3})(\\d{3})(\\d{4})$/);\n if (match) {\n return `(${match[1]}) ${match[2]}-${match[3]}`;\n }\n }\n return rawValue;\n\n case 'number':\n if (typeof rawValue === 'number') {\n return new Intl.NumberFormat().format(rawValue);\n }\n return rawValue;\n\n default:\n // Handle arrays\n if (Array.isArray(rawValue)) {\n if (props.itemRenderer) {\n const items = props.maxItems ? rawValue.slice(0, props.maxItems) : rawValue;\n const rendered = items.map(props.itemRenderer);\n const result = rendered.join(props.separator || ', ');\n return props.maxItems && rawValue.length > props.maxItems \n ? `${result} and ${rawValue.length - props.maxItems} more...`\n : result;\n }\n const items = props.maxItems ? rawValue.slice(0, props.maxItems) : rawValue;\n const result = items.join(props.separator || ', ');\n return props.maxItems && rawValue.length > props.maxItems \n ? `${result} and ${rawValue.length - props.maxItems} more...`\n : result;\n }\n\n // Handle enum/select values with valueToLabel mapping\n if (props.valueToLabel && typeof rawValue === 'string') {\n return props.valueToLabel[rawValue] || rawValue;\n }\n\n return rawValue;\n }\n });\n\n // Handle different display formats for special types\n const renderValue = () => {\n const value = formattedValue.value;\n\n // Email links\n if (props.format === 'email' && value && value !== props.emptyText) {\n return (\n <a href={`mailto:${rawValue}`} style=\"color: #3b82f6; text-decoration: underline;\">\n {value}\n </a>\n );\n }\n\n // URL links\n if (props.format === 'url' && value && value !== props.emptyText) {\n return (\n <a href={rawValue} target=\"_blank\" rel=\"noopener noreferrer\" style=\"color: #3b82f6; text-decoration: underline;\">\n {value}\n </a>\n );\n }\n\n // Phone links\n if (props.format === 'phone' && value && value !== props.emptyText) {\n return (\n <a href={`tel:${rawValue}`} style=\"color: #3b82f6; text-decoration: underline;\">\n {value}\n </a>\n );\n }\n\n // Copyable text\n if (props.copyable && value && value !== props.emptyText) {\n return (\n <div style=\"display: flex; align-items: center; gap: 0.5rem;\">\n <span>{value}</span>\n <button\n style=\"padding: 0.25rem; border: 1px solid #d1d5db; background: #f9fafb; border-radius: 0.25rem; cursor: pointer;\"\n onClick={() => navigator.clipboard.writeText(String(rawValue))}\n title=\"Copy to clipboard\"\n >\n 📋\n </button>\n </div>\n );\n }\n\n // Default text display\n return <span>{value}</span>;\n };\n\n // Render the complete field structure\n return (\n <div class=\"zinia-display-field\" style=\"margin-bottom: 1rem;\" data-testid={`${displayState.storeName}-display-field-${String(props.name)}`} {...attrs}>\n {!props.hideLabel && (\n <div style=\"font-size: 0.875rem; font-weight: 500; color: #374151; margin-bottom: 0.25rem;\">\n {props.label || fieldMetadata?.label || props.name}\n </div>\n )}\n \n <div style=\"font-size: 1rem; color: #111827;\">\n {renderValue()}\n </div>\n \n {props.description && (\n <div style=\"font-size: 0.75rem; color: #6b7280; margin-top: 0.25rem;\">\n {props.description}\n </div>\n )}\n </div>\n );\n };\n\n // Define props\n PlainDisplayField.props = [\n 'name',\n 'label',\n 'hideLabel',\n 'description',\n 'format',\n 'emptyText',\n 'class',\n 'size',\n 'variant',\n 'copyable',\n 'valueToLabel',\n 'separator',\n 'itemRenderer',\n 'maxItems',\n ];\n\n return PlainDisplayField;\n}","/**\n * Plain style package\n * Provides all component creators for the Plain style (minimal styling)\n */\n\nimport * as daisy_ui from '../fields/daisy_ui'; // For components not implemented in plain\nimport * as plain from '../fields/plain';\nimport type { StyleCreators } from '../types/styleCreators';\n\n/**\n * Complete set of Plain style creators\n * Can be registered with the Zinia plugin\n */\n//@ts-ignore\nexport const plainStyle: StyleCreators = {\n createForm: plain.createPlainForm,\n createSubmitButton: plain.createPlainSubmitButton,\n createResetButton: plain.createPlainResetButton,\n createTextField: plain.createPlainTextField,\n createNumberField: plain.createPlainNumberField,\n createCurrencyField: plain.createPlainCurrencyField,\n createSelectField: plain.createPlainSelectField,\n createCheckboxField: plain.createPlainCheckboxField,\n createTextareaField: plain.createPlainTextareaField,\n createRadioField: plain.createPlainRadioField,\n createPasswordField: plain.createPlainPasswordField,\n createEmailField: plain.createPlainEmailField,\n createDateField: plain.createPlainDateField,\n createTelField: plain.createPlainTelField,\n createFileField: plain.createPlainFileField,\n createRangeField: plain.createPlainRangeField,\n createUrlField: plain.createPlainUrlField,\n createSearchField: plain.createPlainSearchField,\n createTimeField: plain.createPlainTimeField,\n createDateTimeLocalField: plain.createPlainDateTimeLocalField,\n // For now, we'll use the DaisyUI implementation for these specialized components\n // Users can override these with their own implementations if needed\n createArrayField: daisy_ui.createDaisyUIArrayField,\n createTransferListField: daisy_ui.createDaisyUITransferListField,\n createToppingsField: daisy_ui.createDaisyUIToppingsField,\n createFormErrorsSummary: daisy_ui.createDaisyUIFormErrorsSummary,\n \n // Display components\n createDisplay: plain.createPlainDisplay,\n createDisplayField: plain.createPlainDisplayField,\n};\n","/**\n * Helper functions for creating and extending render styles\n */\n\nimport type { StyleCreators } from '../types/styleCreators';\n\n/**\n * Extend an existing style with custom overrides\n *\n * @param baseStyle The base style to extend\n * @param overrides Custom overrides for specific components\n * @returns A new style that combines the base style with the overrides\n */\nexport function extendStyle(baseStyle: StyleCreators, overrides: Partial<StyleCreators>): StyleCreators {\n return { ...baseStyle, ...overrides };\n}\n\n/**\n * Merge multiple styles together\n * Later styles will override earlier ones for any overlapping components\n *\n * @param styles Array of styles to merge\n * @returns A new style that combines all the provided styles\n */\nexport function mergeStyles(...styles: Array<Partial<StyleCreators>>): StyleCreators {\n // Start with a complete template to ensure all required properties exist\n const result = createStyleTemplate();\n\n // Create a new object by spreading the template and all styles\n // This is simpler and avoids TypeScript errors with property assignment\n const merged = Object.assign({}, result, ...styles);\n\n // TypeScript needs help understanding that all required properties are present\n return merged as StyleCreators;\n}\n\n/**\n * Create a partial style with only the components you need\n * Useful when you want to override just a few components in a base style\n *\n * @param creators Object containing only the component creators you want to override\n * @returns A partial style object that can be used with extendStyle\n */\nexport function createPartialStyle<T extends Partial<StyleCreators>>(creators: T): T {\n return creators;\n}\n\n/**\n * Create a style template with placeholder implementations\n * Useful as a starting point for creating a completely new style\n *\n * @returns A style object with placeholder implementations that throw errors\n */\nexport function createStyleTemplate(): StyleCreators {\n const notImplemented = (componentName: string) => () => {\n throw new Error(`${componentName} not implemented`);\n };\n\n //@ts-ignore\n return {\n createForm: notImplemented('Form'),\n createSubmitButton: notImplemented('SubmitButton'),\n createResetButton: notImplemented('ResetButton'),\n createTextField: notImplemented('TextField'),\n createNumberField: notImplemented('NumberField'),\n createCurrencyField: notImplemented('CurrencyField'),\n createSelectField: notImplemented('SelectField'),\n createCheckboxField: notImplemented('CheckboxField'),\n createTextareaField: notImplemented('TextareaField'),\n createRadioField: notImplemented('RadioField'),\n createPasswordField: notImplemented('PasswordField'),\n createEmailField: notImplemented('EmailField'),\n createDateField: notImplemented('DateField'),\n createTelField: notImplemented('TelField'),\n createFileField: notImplemented('FileField'),\n createRangeField: notImplemented('RangeField'),\n createUrlField: notImplemented('UrlField'),\n createSearchField: notImplemented('SearchField'),\n createTimeField: notImplemented('TimeField'),\n createDateTimeLocalField: notImplemented('DateTimeLocalField'),\n createArrayField: notImplemented('ArrayField'),\n createTransferListField: notImplemented('TransferListField'),\n createToppingsField: notImplemented('ToppingsField'),\n };\n}\n","/**\n * Common action icons as SVG strings\n * These are Heroicons (heroicons.com) in SVG format for easy use in actions\n */\n\nexport const ActionIcons = {\n // Edit actions\n edit: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\" /></svg>`,\n \n pencil: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z\" /></svg>`,\n \n // Delete actions \n delete: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" /></svg>`,\n \n trash: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" /></svg>`,\n \n // View actions\n view: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" /><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\" /></svg>`,\n \n eye: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" /><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\" /></svg>`,\n \n // Copy/Duplicate actions\n copy: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" /></svg>`,\n \n duplicate: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" /></svg>`,\n \n // Download/Export actions\n download: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" /></svg>`,\n \n // Share/Send actions\n share: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.367 2.684 3 3 0 00-5.367-2.684z\" /></svg>`,\n \n // Settings/Configure actions\n settings: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" /><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" /></svg>`,\n \n // Plus/Add actions\n plus: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 6v6m0 0v6m0-6h6m-6 0H6\" /></svg>`,\n \n // External link actions\n external: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\" /></svg>`,\n \n // Arrow actions\n arrowRight: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 7l5 5m0 0l-5 5m5-5H6\" /></svg>`,\n \n // More/Menu actions\n dots: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z\" /></svg>`,\n \n dotsHorizontal: `<svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0z\" /></svg>`,\n} as const;"]}