@bach.software/vue-dynamic-form 0.3.0 → 0.4.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.
Files changed (38) hide show
  1. package/README.md +163 -163
  2. package/dist/examples.cjs.js +4 -4
  3. package/dist/examples.cjs.js.map +1 -1
  4. package/dist/examples.es.js +235 -209
  5. package/dist/examples.es.js.map +1 -1
  6. package/dist/src/components/DynamicForm.vue.d.ts +3 -0
  7. package/dist/src/components/DynamicFormItem.vue.d.ts +3 -0
  8. package/dist/src/components/DynamicFormItemArray.vue.d.ts +2 -0
  9. package/dist/src/components/DynamicFormItemChoice.vue.d.ts +2 -0
  10. package/dist/src/components/DynamicFormTemplate.vue.d.ts +5 -0
  11. package/dist/src/core/defineMetadata.d.ts +21 -10
  12. package/dist/src/core/useDynamicForm.d.ts +8 -0
  13. package/dist/src/core/useFieldArrayExtended.d.ts +2 -1
  14. package/dist/src/core/useValidatePartialForm.d.ts +8 -0
  15. package/dist/src/core/validation.d.ts +1 -0
  16. package/dist/src/examples/TestForm.vue.d.ts +1 -2
  17. package/dist/src/examples/TestFormTemplate.vue.d.ts +5 -0
  18. package/dist/src/examples/__tests__/TestFormTemplate.testcases.d.ts +1 -2
  19. package/dist/src/index.d.ts +1 -1
  20. package/dist/src/types/DynamicFormItemProps.d.ts +1 -4
  21. package/dist/src/types/DynamicFormSettings.d.ts +3 -3
  22. package/dist/src/types/GetDynamicFormSettingsType.d.ts +3 -0
  23. package/dist/src/types/MetadataConfiguration.d.ts +1 -0
  24. package/dist/src/utils/__tests__/mapEachMetadataItem.test.d.ts +1 -0
  25. package/dist/tsconfig.tsbuildinfo +1 -1
  26. package/dist/useDynamicForm-B3VHKage.js +735 -0
  27. package/dist/useDynamicForm-B3VHKage.js.map +1 -0
  28. package/dist/useDynamicForm-CIS8GwHy.cjs +6 -0
  29. package/dist/useDynamicForm-CIS8GwHy.cjs.map +1 -0
  30. package/dist/vue-dynamic-form.cjs.js +1 -1
  31. package/dist/vue-dynamic-form.es.js +7 -9
  32. package/package.json +1 -1
  33. package/dist/src/examples/__tests__/DynamicForm.test.d.ts +0 -1
  34. package/dist/src/types/KeyValue.d.ts +0 -3
  35. package/dist/useDynamicForm-C6-0mGw4.js +0 -737
  36. package/dist/useDynamicForm-C6-0mGw4.js.map +0 -1
  37. package/dist/useDynamicForm-SHyV1lLH.cjs +0 -6
  38. package/dist/useDynamicForm-SHyV1lLH.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"examples.es.js","sources":["../src/utils/mapEachMetadataItem.ts","../src/examples/components/IconButton.vue","../src/examples/TestFormTemplate.vue","../src/examples/TestForm.vue","../src/examples/__tests__/TestFormTemplate.testcases.ts"],"sourcesContent":["import type { FieldMetadata } from '@/types/FieldMetadata';\n\n/**\n * Recursively walks a `FieldMetadata` tree (visiting `children` and `choice`) and applies\n * `callbackFunc` to every node, returning the transformed tree.\n *\n * The callback receives a shallow clone of each node, so mutations inside the callback do not\n * affect the original metadata. `children` and `choice` on the returned node are replaced with\n * the recursively-mapped results after the callback runs.\n */\nexport function mapEachMetadataItem<\n ExtendedFieldTypes extends string = string,\n ExtendedProperties extends object = object,\n>(\n metadata: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>,\n callbackFunc: (item: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>) => FieldMetadata<ExtendedFieldTypes, ExtendedProperties>,\n): FieldMetadata<ExtendedFieldTypes, ExtendedProperties> {\n if (!metadata || !callbackFunc)\n return metadata;\n\n metadata = callbackFunc?.({ ...metadata });\n metadata.children = metadata?.children?.map(x => mapEachMetadataItem(x, callbackFunc));\n metadata.choice = metadata?.choice?.map(x => mapEachMetadataItem(x, callbackFunc));\n return metadata;\n}\n","<script lang=\"ts\" setup>\ninterface Props {\n icon: 'plus' | 'minus'\n color?: 'blue' | 'red'\n}\ninterface Emits {\n (e: 'click'): void\n}\nconst {\n icon,\n color = 'blue',\n} = defineProps<Props>();\ndefineEmits<Emits>();\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"cursor-pointer inline-flex items-center justify-center rounded-full size-5 text-white-800 cursor-pointer\"\n :class=\"{\n 'bg-blue-200 hover:bg-blue-300': color === 'blue',\n 'bg-red-200 hover:bg-red-300': color === 'red',\n }\"\n @click=\"$emit('click')\"\n >\n <svg v-if=\"icon === 'plus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" />\n </svg>\n <svg v-if=\"icon === 'minus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14\" />\n </svg>\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport type { GetMetadataType } from '@/types/GetMetadataType';\nimport DynamicFormTemplate from '@/components/DynamicFormTemplate.vue';\nimport { defineMetadata } from '@/core/defineMetadata';\nimport IconButton from './components/IconButton.vue';\n\nexport type Metadata = GetMetadataType<typeof metadata>;\n\nconst metadata = defineMetadata<\n {\n text: string\n textBoundByVModel: string\n select: string\n selectBoundByVModel: string\n checkbox: boolean\n checkboxBoundByVModel: boolean\n heading: never\n group: never\n },\n {\n description?: string\n options?: { key: string, value: string }[]\n fullWidth?: boolean\n disabled?: boolean\n hidden?: boolean\n },\n /**\n * Free to decide what attributes you want to pass internally between your templates.\n * You can add any attribute to a <slot /> and then it will be accessible in props.slotProps.\n */\n {\n hideLabel?: boolean\n /** Example on how to keep track of the levels */\n level?: number\n /** Helps identifying that we're below a choice field, so if we're rendering an array we can adjust our layout */\n belowChoiceField?: boolean\n hidden?: boolean\n }\n>();\n</script>\n\n<template>\n <DynamicFormTemplate :metadata-configuration=\"metadata\">\n <template #heading=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, canAddItems, addItem, canRemoveItems, removeItem, slotProps }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"mt-4\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <h3 v-if=\"label\" class=\"flex text-xl font-bold gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </h3>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n </div>\n </template>\n\n <template #heading-array>\n <!-- Don't show any extra elements for the heading -->\n <slot />\n </template>\n\n <template #default-choice=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, slotProps }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center\" :class=\"{ 'text-gray-500': disabled, 'after:content-[\\'*\\'] after:-ml-0.5 after:text-red-500': required }\">\n {{ label }}\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" :below-choice-field=\"true\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label :for=\"`${fieldMetadata.path}[0]`\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\" class=\"flex gap-2 items-center\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </label>\n <slot :hide-label=\"true\" />\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canRemoveItems, removeItem, slotProps }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label v-if=\"!slotProps?.hideLabel\" :for=\"fieldMetadata.path\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n </label>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex flex-col grow\">\n <slot />\n </div>\n <IconButton :class=\"{ invisible: !canRemoveItems }\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #group-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem, slotProps }\">\n <template v-if=\"fieldMetadata.hidden\" />\n <!-- In case we're below a choice field, the first array item is not automatically added, so show a label with buttons -->\n <div v-else-if=\"slotProps?.belowChoiceField\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <!-- In case we show an input directly, show a label and buttons -->\n <slot v-else />\n </template>\n\n <template #group=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, canRemoveItems, addItem, removeItem, slotProps }\">\n <!-- In case of a grouped field we render the field differently -->\n <div v-if=\"!fieldMetadata.hidden\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span v-if=\"!slotProps?.hideLabel\" class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required\" class=\"-ml-0.5 text-red-500\">*</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" color=\"red\" @click=\"removeItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #select-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #selectBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #checkbox-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :checked=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange(($event.target as HTMLInputElement).checked)\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #checkboxBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #textBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #default-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @input=\"handleChange\"\n @blur=\"handleBlur\"\n >\n </template>\n </DynamicFormTemplate>\n</template>\n","<script setup lang=\"ts\">\nimport type { GenericObject } from 'vee-validate';\n\nimport type { Metadata } from './TestFormTemplate.vue';\nimport type { DynamicFormSettings } from '@/types/DynamicFormSettings';\nimport { computed, ref } from 'vue';\nimport { checkTreeHasValue } from '@/utils/checkTreeHasValue';\nimport { mapEachMetadataItem } from '@/utils/mapEachMetadataItem';\nimport DynamicForm from '../components/DynamicForm.vue';\nimport { useDynamicForm } from '../core/useDynamicForm';\nimport TestFormTemplate from './TestFormTemplate.vue';\n\nexport interface Props {\n metadata: Metadata[]\n settings?: DynamicFormSettings\n showDebugState?: boolean\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n}\n\nconst { metadata, settings: _settings, initialEdit = true, hideFieldsWithoutValue = false, showDebugState = false, initialValues } = defineProps<Props>();\n\nconst { values, handleSubmit, errors, meta } = useDynamicForm({\n initialValues,\n});\nconst manualValues = ref();\nconst editMode = ref(initialEdit);\nconst isSubmitted = ref(false);\n\n// Add edit mode functionality to the form. In case we're not in edit mode, disable all items.\nconst metadataWithEdit = computed(() => metadata?.map(x => mapEachMetadataItem(x, (item) => {\n item.computedProps = item.computedProps ?? [];\n\n // Disable all fields when not in edit mode\n item.computedProps.push((thisField) => {\n if (!editMode.value)\n thisField.disabled = true;\n });\n\n if (hideFieldsWithoutValue) {\n // In view mode, hide fields that have no value\n item.computedProps.push((thisField, fieldValue) => {\n if (!editMode.value && !checkTreeHasValue(fieldValue.value))\n thisField.hidden = true;\n });\n\n // In view mode, hide a parent field when all of its children are hidden\n item.computedProps.push((thisField, _fieldValue, childFields) => {\n if (!editMode.value && childFields.value.length > 0 && childFields.value.every(c => c.hidden))\n thisField.hidden = true;\n });\n }\n\n return item;\n})));\n\nconst settings = computed(() => ({\n analytics: true,\n messages: {\n required: '{field} is required',\n minOccurs: 'At least {min} items required',\n choiceMinOccurs: 'The following fields need to occur at least {min} time(s): {field}',\n minLength: 'The minimum length of {field} is {length}',\n maxLength: 'The maximum length of {field} is {length}',\n length: '{field} must be exactly {length} characters',\n pattern: '{field} does not match the required pattern',\n minInclusive: '{field} must be at least {min}',\n maxInclusive: '{field} must be at most {max}',\n minExclusive: '{field} must be greater than {min}',\n maxExclusive: '{field} must be less than {max}',\n enumeration: '{field} must be one of the allowed values',\n whiteSpace: '{field} contains invalid whitespace (mode: {mode})',\n fractionDigits: '{field} may have at most {digits} decimal place(s)',\n totalDigits: '{field} may have at most {digits} significant digit(s)',\n },\n ...(_settings ?? {}),\n}));\n\nfunction submit(e?: Event) {\n handleSubmit(\n (_values) => {\n isSubmitted.value = true;\n editMode.value = false;\n },\n ({ errors: _errors }) => {\n isSubmitted.value = false;\n },\n )(e);\n};\n</script>\n\n<template>\n <form @submit.prevent=\"submit\">\n <div class=\"flex justify-end gap-2\">\n <button v-if=\"!editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\" @click=\"editMode = true\">\n Edit\n </button>\n <button v-if=\"editMode\" type=\"submit\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\">\n Submit\n </button>\n <button v-if=\"editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-gray-200 text-black px-4 py-2 rounded\" data-testid=\"cancel\" @click=\"editMode = false\">\n Cancel\n </button>\n </div>\n <div v-if=\"Object.values(errors).length\" data-testid=\"errors\" class=\"col-12 text-red-600\">\n Errors:\n <ul>\n <li v-for=\"(error, key) in errors\" :key=\"key\">\n <span v-html=\"error\" />\n </li>\n </ul>\n </div>\n <DynamicForm\n :template=\"TestFormTemplate\"\n :metadata=\"metadataWithEdit\"\n :settings\n @update:model-value=\"manualValues = $event\"\n />\n <span v-if=\"isSubmitted\" data-testid=\"isSubmitted\" />\n <pre v-if=\"showDebugState\" class=\"bg-gray-100 p-4 rounded-lg text-sm overflow-auto\">\nIsDirty: {{ meta.dirty }}\nPending: {{ meta.pending }}\nTouched: {{ meta.touched }}\nValid: {{ meta.valid }}\nSubmitted: {{ isSubmitted }}\n\n// form values:\n{{ JSON.stringify(values, null, 2) }}\n </pre>\n </form>\n</template>\n","import type { GenericObject } from 'vee-validate';\nimport type { Metadata } from '@/examples/TestFormTemplate.vue';\n\nimport type { DynamicFormSettings } from '@/types/DynamicFormSettings';\nimport { defineComponent, h, markRaw } from 'vue';\nimport TestForm from '@/examples/TestForm.vue';\n\nexport const defaultTestCase = createTestCase([{\n name: 'text',\n type: 'text',\n fieldOptions: { label: 'Text Input' },\n path: 'with.custom.structure',\n restriction: { maxLength: 10 },\n}]);\n\nexport const arrayTestCase = createTestCase([{\n fieldOptions: { label: 'Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Optional field (max 3)' }, minOccurs: 0, maxOccurs: 3 },\n { fieldOptions: { label: 'Required field (max 3)' }, maxOccurs: 3 },\n { fieldOptions: { label: '2 Fields required' }, minOccurs: 2, maxOccurs: 4 },\n { fieldOptions: { label: 'Section (2 sections required)' }, type: 'heading', minOccurs: 2, maxOccurs: 4, fullWidth: true, children: [\n { fieldOptions: { label: 'Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' }, type: 'select', options: [\n { key: 'option1', value: 'Option 1' },\n { key: 'option2', value: 'Option 2' },\n { key: 'option3', value: 'Option 3' },\n ] },\n { fieldOptions: { label: 'Nested field 3' }, type: 'checkbox' },\n ] },\n ],\n}]);\n\nexport const groupTestCase = createTestCase([{\n fieldOptions: { label: 'Grouped Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, description: `The group is optional, therefore the children will only be required once 1 value is filled in.\n \nYou can test it by filling in one of the fields.`, children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n ],\n}, {\n fieldOptions: { label: 'Grouped Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n ],\n}]);\n\nexport const choiceTestCase = createTestCase([\n {\n fieldOptions: { label: 'Choice Fields (minOccurs 1, maxOccurs 1)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Simple Choice Field' }, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' } },\n { fieldOptions: { label: 'Nested Field 2' } },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Grouped Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Nested Field 2' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Array Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, maxOccurs: 3 },\n { fieldOptions: { label: 'Nested Field 2' }, maxOccurs: 3 },\n ] },\n ],\n },\n]);\n\nexport const childFieldsTestCase = createTestCase([\n {\n fieldOptions: { label: 'Personal Info' },\n type: 'heading',\n name: 'person',\n description: 'Only showing the fields that have a value. Click edit to change.',\n fullWidth: true,\n children: [\n { name: 'firstName', fieldOptions: { label: 'First Name' } },\n { name: 'lastName', fieldOptions: { label: 'Last Name' } },\n { name: 'email', fieldOptions: { label: 'Email' } },\n ],\n },\n {\n fieldOptions: { label: 'Address' },\n type: 'heading',\n name: 'address',\n fullWidth: true,\n children: [\n { name: 'street', fieldOptions: { label: 'Street' }, minOccurs: 0 },\n { name: 'city', fieldOptions: { label: 'City' }, minOccurs: 0 },\n { name: 'country', fieldOptions: { label: 'Country' }, minOccurs: 0 },\n ],\n },\n], undefined, {\n initialEdit: false,\n hideFieldsWithoutValue: true,\n initialValues: {\n person: {\n firstName: 'Jack',\n lastName: 'Smit',\n },\n },\n});\n\nexport const individualTestCase = createTestCase(\n [{\n name: 'items',\n type: 'text',\n fieldOptions: { label: 'Items' },\n maxOccurs: 3,\n attributes: [{ name: 'lang', type: 'text', minOccurs: 0 }],\n }],\n {\n // validateOnValueUpdate: false,\n // validateOnValueUpdateAfterSubmit: false,\n // validateWhenInError: true,\n // validateOnBlur: true,\n },\n);\n\nexport function createTestCase(\n metadata: Metadata[],\n settings?: DynamicFormSettings,\n testCaseConfig: {\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n } = {},\n) {\n return markRaw(defineComponent({\n render: () => h(TestForm, { ...testCaseConfig, metadata, settings, showDebugState: true }),\n }));\n}\n"],"names":["mapEachMetadataItem","metadata","callbackFunc","x","_createElementBlock","color","$emit","icon","_openBlock","_hoisted_1","_cache","_createElementVNode","_hoisted_2","defineMetadata","_createBlock","DynamicFormTemplate","_unref","fieldMetadata","errorMessage","label","disabled","canAddItems","addItem","canRemoveItems","removeItem","slotProps","_normalizeClass","_createTextVNode","_toDisplayString","IconButton","_hoisted_3","_renderSlot","_ctx","_withCtx","required","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_createVNode","_hoisted_15","_hoisted_16","_Fragment","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","value","handleBlur","handleChange","optionKey","optionValue","_hoisted_26","$event","_hoisted_28","_vModelSelect","_vModelCheckbox","_vModelText","values","handleSubmit","errors","meta","useDynamicForm","__props","manualValues","ref","editMode","isSubmitted","metadataWithEdit","computed","item","thisField","fieldValue","checkTreeHasValue","_fieldValue","childFields","c","settings","submit","e","_values","_errors","_renderList","error","key","DynamicForm","TestFormTemplate","showDebugState","defaultTestCase","createTestCase","arrayTestCase","groupTestCase","choiceTestCase","childFieldsTestCase","individualTestCase","testCaseConfig","markRaw","defineComponent","h","TestForm"],"mappings":";;AAUO,SAASA,EAIdC,GACAC,GACuD;AACvD,SAAI,CAACD,KAAY,CAACC,MAGlBD,IAAWC,IAAe,EAAE,GAAGD,GAAU,GACzCA,EAAS,WAAWA,GAAU,UAAU,IAAI,OAAKD,EAAoBG,GAAGD,CAAY,CAAC,GACrFD,EAAS,SAASA,GAAU,QAAQ,IAAI,OAAKD,EAAoBG,GAAGD,CAAY,CAAC,IAC1ED;AACT;;;;;;;;;;;;;;;;;;;;;;;;;2BCREG,EAeS,UAAA;AAAA,MAdP,MAAK;AAAA,MACL,UAAM,4GAA0G;AAAA,yCAC/DC,EAAAA,UAAK;AAAA,uCAAkDA,EAAAA,UAAK;AAAA,MAAA;MAI5G,gCAAOC,EAAAA,MAAK,OAAA;AAAA,IAAA;MAEFC,EAAAA,SAAI,UAAfC,EAAA,GAAAJ,EAEM,OAFNK,GAEMC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,QADJC,EAAkF,QAAA;AAAA,UAA5E,kBAAe;AAAA,UAAQ,mBAAgB;AAAA,UAAQ,GAAE;AAAA,QAAA;;MAE9CJ,EAAAA,SAAI,WAAfC,EAAA,GAAAJ,EAEM,OAFNQ,GAEMF,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,QADJC,EAAoE,QAAA;AAAA,UAA9D,kBAAe;AAAA,UAAQ,mBAAgB;AAAA,UAAQ,GAAE;AAAA,QAAA;;;;;;;;;;;;;;;;;;;ACrB7D,UAAMV,IAAWY,EAAA;2BAkCfC,EAwMsBC,GAAA,EAxMA,0BAAwBC,EAAAf,CAAA,KAAQ;AAAA,MACzC,WACT,CAeM,EAhBc,eAAAgB,GAAa,cAAA,EAAkB,cAAAC,GAAc,OAAAC,EAAA,GAAS,UAAAC,GAAU,aAAAC,GAAa,SAAAC,GAAS,gBAAAC,GAAgB,YAAAC,GAAY,WAAAC,QAAS;AAAA,QACnIR,EAAc,2BAA1Bb,EAeM,OAAA;AAAA;UAf4B,OAAKsB,EAAA,CAAC,QAAM,EAAA,iBAA4BT,EAAc,WAAS,CAAA;AAAA,QAAA;UACrFE,UAAVf,EAIK,MAAA;AAAA;YAJY,UAAM,kDAAgD,EAAA,iBAA4Ba,EAAc,YAAYG,GAAQ,CAAA;AAAA,UAAA;YAChIO,EAAAC,EAAAT,CAAK,IAAG,KACX,CAAA;AAAA,YAAkBE,UAAlBP,EAA8He,GAAA;AAAA;cAA/F,MAAK;AAAA,cAAO,UAAS;AAAA,cAAM,eAAW,GAAKZ,EAAc,IAAI;AAAA,cAAgB,SAAOK;AAAA,YAAA;YACjGC,UAAlBT,EAAoJe,GAAA;AAAA;cAAlH,MAAK;AAAA,cAAQ,UAAS;AAAA,cAAK,OAAM;AAAA,cAAO,eAAW,GAAKZ,EAAc,IAAI;AAAA,cAAmB,SAAOO;AAAA,YAAA;;UAExIb,EAA8E,OAA9EF,GAA8EmB,EAAlCX,EAAc,WAAW,GAAA,CAAA;AAAA,UAE7DC,EAAa,cADrBd,EAIgC,QAAA;AAAA;YAF9B,OAAM;AAAA,YACL,eAAW,GAAKa,EAAc,IAAI;AAAA,UAAA,GACjCW,EAAAV,EAAa,KAAK,GAAA,GAAAN,CAAA;UACtBD,EAEM,OAFNmB,GAEM;AAAA,YADJC,EAA6CC,EAAA,QAAA,WAAA;AAAA,cAAtC,QAAQP,GAAW,SAAK,KAAA;AAAA,YAAA;;;;MAK1B,mBAET,MAAQ;AAAA,QAARM,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAGC,kBAAcC,EACvB,CAaM,EAdqB,eAAAhB,GAAa,cAAA,EAAkB,cAAAC,GAAc,OAAAC,KAAS,UAAAC,GAAU,UAAAc,GAAU,WAAAT,QAAS;AAAA,QAClGR,EAAc,2BAA1Bb,EAaM,OAAA;AAAA;UAb4B,OAAKsB,EAAA,CAAC,uBAAqB,EAAA,iBAA4BT,EAAc,WAAS,CAAA;AAAA,QAAA;UAC9GN,EAEO,QAAA;AAAA,YAFD,OAAKe,EAAA,CAAC,2BAAyB,EAAA,iBAA4BN,2DAAoEc,GAAQ,CAAA;AAAA,UAAA,KACxIf,CAAK,GAAA,CAAA;AAAA,UAEVR,EAEM,OAFNwB,IAEM;AAAA,YADJJ,EAAwEC,EAAA,QAAA,WAAA;AAAA,cAAjE,QAAQP,GAAW,SAAK,KAAA;AAAA,cAAa,kBAAoB;AAAA,YAAA;;UAElEd,EAA8E,OAA9EyB,IAA8ER,EAAlCX,EAAc,WAAW,GAAA,CAAA;AAAA,UAE7DC,EAAa,cADrBd,EAIgC,QAAA;AAAA;YAF9B,OAAM;AAAA,YACL,eAAW,GAAKa,EAAc,IAAI;AAAA,UAAA,GACjCW,EAAAV,EAAa,KAAK,GAAA,GAAAmB,EAAA;;;MAIf,iBAAaJ,EACtB,CAaM,EAdoB,eAAAhB,mBAA+B,cAAAC,GAAc,OAAAC,EAAA,GAAS,UAAAC,GAAU,UAAAc,GAAU,aAAAb,GAAa,SAAAC,QAAO;AAAA,QAC5GL,EAAc,2BAA1Bb,EAaM,OAAA;AAAA;UAb4B,OAAKsB,EAAA,CAAC,uBAAqB,EAAA,iBAA4BT,EAAc,WAAS,CAAA;AAAA,QAAA;UAC9GN,EAIQ,SAAA;AAAA,YAJA,KAAG,GAAKM,EAAc,IAAI;AAAA,YAAQ,6BAA0BA,EAAc,YAAYG,EAAA,GAAkB,yBAAyB,CAAA;AAAA,UAAA;YACpIO,EAAAC,EAAAT,CAAK,IAAG,KACX,CAAA;AAAA,YAAYe,UAAZ9B,EAA2D,QAA3DkC,IAAmD,GAAC;YAClCjB,UAAlBP,EAA8He,GAAA;AAAA;cAA/F,MAAK;AAAA,cAAO,UAAS;AAAA,cAAM,eAAW,GAAKZ,EAAc,IAAI;AAAA,cAAgB,SAAOK;AAAA,YAAA;;UAErHS,EAA2BC,EAAA,QAAA,WAAA,EAApB,WAAY,IAAI;AAAA,UACvBrB,EAA8E,OAA9E4B,IAA8EX,EAAlCX,EAAc,WAAW,GAAA,CAAA;AAAA,UAE7DC,EAAa,cADrBd,EAIgC,QAAA;AAAA;YAF9B,OAAM;AAAA,YACL,eAAW,GAAKa,EAAc,IAAI;AAAA,UAAA,GACjCW,EAAAV,EAAa,KAAK,GAAA,GAAAsB,EAAA;;;MAIf,WACT,CAiBM,EAlBc,eAAAvB,GAAa,cAAA,EAAkB,cAAAC,GAAc,OAAAC,EAAA,GAAS,UAAAC,GAAU,UAAAc,GAAU,gBAAAX,GAAgB,YAAAC,GAAY,WAAAC,QAAS;AAAA,QACvHR,EAAc,2BAA1Bb,EAiBM,OAAA;AAAA;UAjB4B,OAAKsB,EAAA,CAAC,uBAAqB,EAAA,iBAA4BT,EAAc,WAAS,CAAA;AAAA,QAAA;UAChGQ,GAAW,8BAAzBrB,EAGQ,SAAA;AAAA;YAH6B,KAAKa,EAAc;AAAA,YAAO,OAAKS,EAAA,EAAA,iBAAqBT,EAAc,YAAYG,GAAQ;AAAA,UAAA;YACtHO,EAAAC,EAAAT,CAAK,IAAG,KACX,CAAA;AAAA,YAAYe,UAAZ9B,EAA2D,QAA3DqC,IAAmD,GAAC;;UAEtD9B,EAKM,OALN+B,IAKM;AAAA,YAJJ/B,EAEM,OAFNgC,IAEM;AAAA,cADJZ,EAAQC,EAAA,QAAA,SAAA;AAAA,YAAA;YAEVY,EAAsKf,GAAA;AAAA,cAAzJ,uBAAqBN,GAAc;AAAA,cAAI,MAAK;AAAA,cAAQ,UAAS;AAAA,cAAK,OAAM;AAAA,cAAO,eAAW,GAAKN,EAAc,IAAI;AAAA,cAAmB,SAAOO;AAAA,YAAA;;UAE1Jb,EAA8E,OAA9EkC,IAA8EjB,EAAlCX,EAAc,WAAW,GAAA,CAAA;AAAA,UAE7DC,EAAa,cADrBd,EAIgC,QAAA;AAAA;YAF9B,OAAM;AAAA,YACL,eAAW,GAAKa,EAAc,IAAI;AAAA,UAAA,GACjCW,EAAAV,EAAa,KAAK,GAAA,GAAA4B,EAAA;;QAExBf,EAA0BC,EAAA,QAAA,YAAA;AAAA,MAAA;MAGjB,iBACT,CAAwC,EADhB,eAAAf,GAAa,cAAA,EAAkB,cAAAC,GAAc,OAAAC,EAAA,GAAS,UAAAC,GAAU,UAAAc,GAAU,aAAAb,GAAa,SAAAC,GAAS,WAAAG,QAAS;AAAA,QACjHR,EAAc,eAA9Bb,EAAwC2C,GAAA,EAAA,KAAA,EAAA,GAAA,CAAA,GAAA,EAAA,KAExBtB,GAAW,yBAA3BrB,EAeM,OAAA;AAAA;UAfwC,OAAKsB,EAAA,EAAA,iBAAqBT,EAAc,WAAS;AAAA,QAAA;UAC7FN,EAIO,QAAA;AAAA,YAJD,UAAM,gCAA8B,EAAA,iBAA4BM,EAAc,YAAYG,GAAQ,CAAA;AAAA,UAAA;YACnGO,EAAAC,EAAAT,CAAK,IAAG,KACX,CAAA;AAAA,YAAYe,UAAZ9B,EAA2D,QAA3D4C,IAAmD,GAAC;YAClC3B,UAAlBP,EAA8He,GAAA;AAAA;cAA/F,MAAK;AAAA,cAAO,UAAS;AAAA,cAAM,eAAW,GAAKZ,EAAc,IAAI;AAAA,cAAgB,SAAOK;AAAA,YAAA;;UAErHX,EAEM,OAFNsC,IAEM;AAAA,YADJlB,EAA6CC,EAAA,QAAA,WAAA;AAAA,cAAtC,QAAQP,GAAW,SAAK,KAAA;AAAA,YAAA;;UAEjCd,EAA8E,OAA9EuC,IAA8EtB,EAAlCX,EAAc,WAAW,GAAA,CAAA;AAAA,UAE7DC,EAAa,cADrBd,EAIgC,QAAA;AAAA;YAF9B,OAAM;AAAA,YACL,eAAW,GAAKa,EAAc,IAAI;AAAA,UAAA,GACjCW,EAAAV,EAAa,KAAK,GAAA,GAAAiC,EAAA;iBAGxBpB,EAAeC,EAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA;AAAA,MAAA;MAGN,OAAKC,EAEd,CAgBM,EAlBY,eAAAhB,mBAA+B,cAAAC,GAAc,OAAAC,EAAA,GAAS,UAAAC,GAAU,UAAAc,GAAU,aAAAb,GAAa,gBAAAE,GAAgB,SAAAD,GAAS,YAAAE,GAAY,WAAAC,QAAS;AAAA,QAE3IR,EAAc,2BAA1Bb,EAgBM,OAAA;AAAA;UAhB6B,OAAKsB,EAAA,EAAA,iBAAqBT,EAAc,WAAS;AAAA,QAAA;UACrEQ,GAAW,8BAAxBrB,EAKO,QAAA;AAAA;YAL4B,UAAM,gCAA8B,EAAA,iBAA4Ba,EAAc,YAAYG,GAAQ,CAAA;AAAA,UAAA;YAChIO,EAAAC,EAAAT,CAAK,IAAG,KACX,CAAA;AAAA,YAAYe,UAAZ9B,EAA2D,QAA3DgD,IAAmD,GAAC;YAClC/B,UAAlBP,EAA8He,GAAA;AAAA;cAA/F,MAAK;AAAA,cAAO,UAAS;AAAA,cAAM,eAAW,GAAKZ,EAAc,IAAI;AAAA,cAAgB,SAAOK;AAAA,YAAA;YACjGC,UAAlBT,EAAoJe,GAAA;AAAA;cAAlH,MAAK;AAAA,cAAQ,UAAS;AAAA,cAAM,eAAW,GAAKZ,EAAc,IAAI;AAAA,cAAkB,OAAM;AAAA,cAAO,SAAOO;AAAA,YAAA;;UAExIb,EAEM,OAFN0C,IAEM;AAAA,YADJtB,EAA6CC,EAAA,QAAA,WAAA;AAAA,cAAtC,QAAQP,GAAW,SAAK,KAAA;AAAA,YAAA;;UAEjCd,EAA8E,OAA9E2C,IAA8E1B,EAAlCX,EAAc,WAAW,GAAA,CAAA;AAAA,UAE7DC,EAAa,cADrBd,EAIgC,QAAA;AAAA;YAF9B,OAAM;AAAA,YACL,eAAW,GAAKa,EAAc,IAAI;AAAA,UAAA,GACjCW,EAAAV,EAAa,KAAK,GAAA,GAAAqC,EAAA;;QAExBxB,EAA0BC,EAAA,QAAA,YAAA;AAAA,MAAA;MAGjB,gBAAYC,EACrB,CAWS,EAZgB,eAAAhB,GAAa,cAAA,EAAkB,OAAAuC,GAAO,YAAAC,GAAY,cAAAC,KAAgB,UAAAtC,QAAQ;AAAA,QACnGT,EAWS,UAAA;AAAA,UAVN,IAAIM,EAAc;AAAA,UAClB,OAAOuC,EAAM;AAAA,UACb,UAAUvC,EAAc,YAAYG;AAAA,UACrC,OAAM;AAAA,UACL,UAAQsC;AAAA,UACR,QAAMD;AAAA,QAAA;WAEPjD,EAAA,EAAA,GAAAJ,EAES2C,WAFgD9B,EAAc,SAAO,CAAA,EAAA,KAAxD0C,UAAkBC,cAAxCxD,EAES,UAAA;AAAA,YAFwE,KAAKuD;AAAA,YAAY,OAAOA;AAAA,UAAA,KACpGC,CAAW,GAAA,GAAAC,EAAA;;;MAKT,6BAAyB5B,EAClC,CAUS,EAX6B,eAAAhB,mBAA+B,OAAAuC,GAAO,YAAAC,KAAc,UAAArC,QAAQ;AAAA,UAClGT,EAUS,UAAA;AAAA,UATN,IAAIM,EAAc;AAAA,UACV,uBAAA,CAAA6C,MAAAN,EAAM,QAAKM;AAAA,UACnB,UAAU7C,EAAc,YAAYG;AAAA,UACrC,OAAM;AAAA,UACL,QAAMqC;AAAA,QAAA;WAEPjD,EAAA,EAAA,GAAAJ,EAES2C,WAFgD9B,EAAc,SAAO,CAAA,EAAA,KAAxD0C,UAAkBC,cAAxCxD,EAES,UAAA;AAAA,YAFwE,KAAKuD;AAAA,YAAY,OAAOA;AAAA,UAAA,KACpGC,CAAW,GAAA,GAAAG,EAAA;;UANP,CAAAC,GAAAR,EAAM,KAAK;AAAA,QAAA;;MAWb,kBAAcvB,EACvB,CAQC,EAT0B,eAAAhB,GAAa,cAAA,EAAkB,OAAAuC,GAAO,YAAAC,GAAY,cAAAC,KAAgB,UAAAtC,QAAQ;AAAA,QACrGT,EAQC,SAAA;AAAA,UAPE,IAAIM,EAAc;AAAA,UAClB,SAASuC,EAAM;AAAA,UACf,UAAUvC,EAAc,YAAYG;AAAA,UACrC,MAAK;AAAA,UACL,OAAM;AAAA,UACL,iBAAQsC,EAAcI,EAAO,OAA4B,OAAO;AAAA,UAChE,QAAML;AAAA,QAAA;;MAIA,+BAA2BxB,EACpC,CAOC,EARuC,eAAAhB,mBAA+B,OAAAuC,GAAO,YAAAC,KAAc,UAAArC,QAAQ;AAAA,UACpGT,EAOC,SAAA;AAAA,UANE,IAAIM,EAAc;AAAA,UACV,uBAAA,CAAA6C,MAAAN,EAAM,QAAKM;AAAA,UACnB,UAAU7C,EAAc,YAAYG;AAAA,UACrC,MAAK;AAAA,UACL,OAAM;AAAA,UACL,QAAMqC;AAAA,QAAA;UAJE,CAAAQ,GAAAT,EAAM,KAAK;AAAA,QAAA;;MAQb,2BAAuBvB,EAChC,CAOC,EARmC,eAAAhB,mBAA+B,OAAAuC,GAAO,YAAAC,KAAc,UAAArC,QAAQ;AAAA,UAChGT,EAOC,SAAA;AAAA,UANE,IAAIM,EAAc;AAAA,UACV,uBAAA,CAAA6C,MAAAN,EAAM,QAAKM;AAAA,UACnB,UAAU7C,EAAc,YAAYG;AAAA,UACrC,MAAK;AAAA,UACL,OAAM;AAAA,UACL,QAAMqC;AAAA,QAAA;UAJE,CAAAS,GAAAV,EAAM,KAAK;AAAA,QAAA;;MAQb,iBAAavB,EACtB,CAQC,EATyB,eAAAhB,GAAa,cAAA,EAAkB,OAAAuC,GAAO,YAAAC,GAAY,cAAAC,KAAgB,UAAAtC,QAAQ;AAAA,QACpGT,EAQC,SAAA;AAAA,UAPE,IAAIM,EAAc;AAAA,UAClB,OAAOuC,EAAM;AAAA,UACb,UAAUvC,EAAc,YAAYG;AAAA,UACrC,MAAK;AAAA,UACL,OAAM;AAAA,UACL,SAAOsC;AAAA,UACP,QAAMD;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxNf,UAAM,EAAE,QAAAU,GAAQ,cAAAC,GAAc,QAAAC,GAAQ,MAAAC,EAAA,IAASC,EAAe;AAAA,MAC5D,eAAYC,EAAA;AAAA,IAAA,CACb,GACKC,IAAeC,EAAA,GACfC,IAAWD,EAAIF,EAAA,WAAW,GAC1BI,IAAcF,EAAI,EAAK,GAGvBG,IAAmBC,EAAS,MAAMN,EAAA,UAAU,IAAI,CAAArE,MAAKH,EAAoBG,GAAG,CAAC4E,OACjFA,EAAK,gBAAgBA,EAAK,iBAAiB,CAAA,GAG3CA,EAAK,cAAc,KAAK,CAACC,MAAc;AACrC,MAAKL,EAAS,UACZK,EAAU,WAAW;AAAA,IACzB,CAAC,GAEGR,EAAA,2BAEFO,EAAK,cAAc,KAAK,CAACC,GAAWC,MAAe;AACjD,MAAI,CAACN,EAAS,SAAS,CAACO,EAAkBD,EAAW,KAAK,MACxDD,EAAU,SAAS;AAAA,IACvB,CAAC,GAGDD,EAAK,cAAc,KAAK,CAACC,GAAWG,GAAaC,MAAgB;AAC/D,MAAI,CAACT,EAAS,SAASS,EAAY,MAAM,SAAS,KAAKA,EAAY,MAAM,MAAM,CAAAC,MAAKA,EAAE,MAAM,MAC1FL,EAAU,SAAS;AAAA,IACvB,CAAC,IAGID,EACR,CAAC,CAAC,GAEGO,IAAWR,EAAS,OAAO;AAAA,MAC/B,WAAW;AAAA,MACX,UAAU;AAAA,QACR,UAAU;AAAA,QACV,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,cAAc;AAAA,QACd,cAAc;AAAA,QACd,cAAc;AAAA,QACd,cAAc;AAAA,QACd,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,aAAa;AAAA,MAAA;AAAA,MAEf,GAAIN,EAAA,YAAa,CAAA;AAAA,IAAC,EAClB;AAEF,aAASe,EAAOC,GAAW;AACzB,MAAApB;AAAA,QACE,CAACqB,MAAY;AACX,UAAAb,EAAY,QAAQ,IACpBD,EAAS,QAAQ;AAAA,QACnB;AAAA,QACA,CAAC,EAAE,QAAQe,QAAc;AACvB,UAAAd,EAAY,QAAQ;AAAA,QACtB;AAAA,MAAA,EACAY,CAAC;AAAA,IACL;2BAIEpF,EAqCO,QAAA;AAAA,MArCA,YAAgBmF,GAAM,CAAA,SAAA,CAAA;AAAA,IAAA;MAC3B5E,EAUM,OAVNF,IAUM;AAAA,QATWkE,EAAA,0BAAfvE,EAES,UAAA;AAAA;UAFgB,MAAK;AAAA,UAAS,OAAM;AAAA,UAA+D,eAAY;AAAA,UAAU,gCAAOuE,EAAA,QAAQ;AAAA,QAAA,GAAS,QAE1J;AAAA,QACcA,EAAA,cAAdvE,EAES,UAFTQ,IAAgI,UAEhI;QACc+D,EAAA,cAAdvE,EAES,UAAA;AAAA;UAFe,MAAK;AAAA,UAAS,OAAM;AAAA,UAA+D,eAAY;AAAA,UAAU,gCAAOuE,EAAA,QAAQ;AAAA,QAAA,GAAU,UAE1J;;MAES,OAAO,OAAO3D,EAAAqD,CAAA,CAAM,EAAE,UAAjC7D,KAAAJ,EAOM,OAPN0B,IAOM;AAAA,0BAPoF,aAExF,EAAA;AAAA,QAAAnB,EAIK,MAAA,MAAA;AAAA,WAHHH,EAAA,EAAA,GAAAJ,EAEK2C,GAAA,MAAA4C,EAFsB3E,EAAAqD,CAAA,GAAM,CAArBuB,GAAOC,YAAnBzF,EAEK,MAAA,EAF+B,KAAAyF,KAAQ;AAAA,YAC1ClF,EAAuB,QAAA,EAAjB,WAAQiF,KAAK,MAAA,GAAAzD,EAAA;AAAA,UAAA;;;MAIzBS,EAKEkD,GAAA;AAAA,QAJC,UAAUC;AAAAA,QACV,UAAUlB,EAAA;AAAA,QACV,UAAAS,EAAA;AAAA,QACA,uBAAkB5E,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAoD,MAAEW,EAAA,QAAeX;AAAA,MAAA;MAE1Bc,EAAA,SAAZpE,EAAA,GAAAJ,EAAqD,QAArDgC,EAAqD;MAC1C4D,EAAAA,kBAAXxF,EAAA,GAAAJ,EASM,OATNiC,IAAoF,cAC/ET,EAAGZ,KAAK,KAAK,IAAG;AAAA,eACbA,EAAAsD,CAAA,EAAK,OAAO,IAAG;AAAA,eACftD,EAAAsD,CAAA,EAAK,OAAO,IAAG;AAAA,WACpB1C,EAAGZ,EAAAsD,CAAA,EAAK,KAAK,IAAG;AAAA,eACZ1C,EAAGgD,EAAA,KAAW,IAAG;AAAA;AAAA;AAAA,MAGzB,KAAK,UAAU5D,EAAAmD,CAAA,eAAmB;AAAA,OACjC,CAAA;;;IC1HS8B,KAAkBC,EAAe,CAAC;AAAA,EAC7C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,cAAc,EAAE,OAAO,aAAA;AAAA,EACvB,MAAM;AAAA,EACN,aAAa,EAAE,WAAW,GAAA;AAC5B,CAAC,CAAC,GAEWC,KAAgBD,EAAe,CAAC;AAAA,EAC3C,cAAc,EAAE,OAAO,eAAA;AAAA,EACvB,MAAM;AAAA,EACN,UAAU;AAAA,IACR,EAAE,cAAc,EAAE,OAAO,4BAA4B,WAAW,GAAG,WAAW,EAAA;AAAA,IAC9E,EAAE,cAAc,EAAE,OAAO,yBAAA,GAA4B,WAAW,EAAA;AAAA,IAChE,EAAE,cAAc,EAAE,OAAO,uBAAuB,WAAW,GAAG,WAAW,EAAA;AAAA,IACzE,EAAE,cAAc,EAAE,OAAO,mCAAmC,MAAM,WAAW,WAAW,GAAG,WAAW,GAAG,WAAW,IAAM,UAAU;AAAA,MAClI,EAAE,cAAc,EAAE,OAAO,mBAAiB;AAAA,MAC1C,EAAE,cAAc,EAAE,OAAO,6BAA6B,MAAM,UAAU,SAAS;AAAA,QAC7E,EAAE,KAAK,WAAW,OAAO,WAAA;AAAA,QACzB,EAAE,KAAK,WAAW,OAAO,WAAA;AAAA,QACzB,EAAE,KAAK,WAAW,OAAO,WAAA;AAAA,MAAW,EACtC;AAAA,MACA,EAAE,cAAc,EAAE,OAAO,iBAAA,GAAoB,MAAM,WAAA;AAAA,IAAW,EAChE;AAAA,EAAE;AAEN,CAAC,CAAC,GAEWE,KAAgBF,EAAe,CAAC;AAAA,EAC3C,cAAc,EAAE,OAAO,iBAAA;AAAA,EACvB,MAAM;AAAA,EACN,UAAU;AAAA,IACR,EAAE,cAAc,EAAE,OAAO,oBAAoB,MAAM,SAAS,UAAU;AAAA,MACpE,EAAE,cAAc,EAAE,OAAO,0BAAA,GAA6B,WAAW,GAAA;AAAA,MACjE,EAAE,cAAc,EAAE,OAAO,0BAAA,GAA6B,WAAW,GAAA;AAAA,IAAK,EACxE;AAAA,IACA,EAAE,cAAc,EAAE,OAAO,iBAAA,GAAoB,MAAM,SAAS,WAAW,GAAG,aAAa;AAAA;AAAA,mDAExC,UAAU;AAAA,MACvD,EAAE,cAAc,EAAE,OAAO,0BAAA,GAA6B,WAAW,GAAA;AAAA,MACjE,EAAE,cAAc,EAAE,OAAO,0BAAA,GAA6B,WAAW,GAAA;AAAA,IAAK,EACxE;AAAA,EAAE;AAEN,GAAG;AAAA,EACD,cAAc,EAAE,OAAO,uBAAA;AAAA,EACvB,MAAM;AAAA,EACN,UAAU;AAAA,IACR,EAAE,cAAc,EAAE,OAAO,iBAAA,GAAoB,MAAM,SAAS,WAAW,GAAG,WAAW,IAAM,UAAU;AAAA,MACnG,EAAE,cAAc,EAAE,OAAO,4BAA0B;AAAA,MACnD,EAAE,cAAc,EAAE,OAAO,4BAA0B;AAAA,IAAE,EACvD;AAAA,IACA,EAAE,cAAc,EAAE,OAAO,oBAAoB,MAAM,SAAS,WAAW,GAAG,WAAW,GAAG,WAAW,IAAM,UAAU;AAAA,MACjH,EAAE,cAAc,EAAE,OAAO,4BAA0B;AAAA,MACnD,EAAE,cAAc,EAAE,OAAO,4BAA0B;AAAA,IAAE,EACvD;AAAA,EAAE;AAEN,CAAC,CAAC,GAEWG,KAAiBH,EAAe;AAAA,EAC3C;AAAA,IACE,cAAc,EAAE,OAAO,2CAAA;AAAA,IACvB,MAAM;AAAA,IACN,UAAU;AAAA,MACR,EAAE,cAAc,EAAE,OAAO,yBAAyB,WAAW,IAAM,aAAa,6DAA6D,QAAQ;AAAA,QACnJ,EAAE,cAAc,EAAE,OAAO,mBAAiB;AAAA,QAC1C,EAAE,cAAc,EAAE,OAAO,mBAAiB;AAAA,MAAE,EAC9C;AAAA,IAAE;AAAA,EACJ;AAAA,EAEF;AAAA,IACE,cAAc,EAAE,OAAO,mDAAA;AAAA,IACvB,MAAM;AAAA,IACN,UAAU;AAAA,MACR,EAAE,cAAc,EAAE,OAAO,wBAAwB,MAAM,SAAS,WAAW,GAAG,WAAW,IAAM,aAAa,6DAA6D,QAAQ;AAAA,QAC/K,EAAE,cAAc,EAAE,OAAO,oBAAoB,MAAM,SAAS,UAAU;AAAA,UACpE,EAAE,cAAc,EAAE,OAAO,uBAAA,GAA0B,WAAW,GAAA;AAAA,UAC9D,EAAE,cAAc,EAAE,OAAO,uBAAA,GAA0B,WAAW,GAAA;AAAA,QAAK,EACrE;AAAA,QACA,EAAE,cAAc,EAAE,OAAO,oBAAoB,MAAM,SAAS,UAAU;AAAA,UACpE,EAAE,cAAc,EAAE,OAAO,uBAAA,GAA0B,WAAW,GAAA;AAAA,UAC9D,EAAE,cAAc,EAAE,OAAO,uBAAA,GAA0B,WAAW,GAAA;AAAA,QAAK,EACrE;AAAA,MAAE,EACJ;AAAA,IAAE;AAAA,EACJ;AAAA,EAEF;AAAA,IACE,cAAc,EAAE,OAAO,iDAAA;AAAA,IACvB,MAAM;AAAA,IACN,UAAU;AAAA,MACR,EAAE,cAAc,EAAE,OAAO,wBAAwB,MAAM,SAAS,WAAW,GAAG,WAAW,IAAM,aAAa,6DAA6D,QAAQ;AAAA,QAC/K,EAAE,cAAc,EAAE,OAAO,iBAAA,GAAoB,WAAW,EAAA;AAAA,QACxD,EAAE,cAAc,EAAE,OAAO,iBAAA,GAAoB,WAAW,EAAA;AAAA,MAAE,EAC5D;AAAA,IAAE;AAAA,EACJ;AAEJ,CAAC,GAEYI,KAAsBJ,EAAe;AAAA,EAChD;AAAA,IACE,cAAc,EAAE,OAAO,gBAAA;AAAA,IACvB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,WAAW;AAAA,IACX,UAAU;AAAA,MACR,EAAE,MAAM,aAAa,cAAc,EAAE,OAAO,eAAa;AAAA,MACzD,EAAE,MAAM,YAAY,cAAc,EAAE,OAAO,cAAY;AAAA,MACvD,EAAE,MAAM,SAAS,cAAc,EAAE,OAAO,UAAQ;AAAA,IAAE;AAAA,EACpD;AAAA,EAEF;AAAA,IACE,cAAc,EAAE,OAAO,UAAA;AAAA,IACvB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,UAAU;AAAA,MACR,EAAE,MAAM,UAAU,cAAc,EAAE,OAAO,SAAA,GAAY,WAAW,EAAA;AAAA,MAChE,EAAE,MAAM,QAAQ,cAAc,EAAE,OAAO,OAAA,GAAU,WAAW,EAAA;AAAA,MAC5D,EAAE,MAAM,WAAW,cAAc,EAAE,OAAO,UAAA,GAAa,WAAW,EAAA;AAAA,IAAE;AAAA,EACtE;AAEJ,GAAG,QAAW;AAAA,EACZ,aAAa;AAAA,EACb,wBAAwB;AAAA,EACxB,eAAe;AAAA,IACb,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,UAAU;AAAA,IAAA;AAAA,EACZ;AAEJ,CAAC,GAEYK,KAAqBL;AAAA,EAChC,CAAC;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc,EAAE,OAAO,QAAA;AAAA,IACvB,WAAW;AAAA,IACX,YAAY,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,WAAW,EAAA,CAAG;AAAA,EAAA,CAC1D;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAMF;AAEO,SAASA,EACdjG,GACAqF,GACAkB,IAII,CAAA,GACJ;AACA,SAAOC,EAAQC,EAAgB;AAAA,IAC7B,QAAQ,MAAMC,EAAEC,IAAU,EAAE,GAAGJ,GAAgB,UAAAvG,GAAU,UAAAqF,GAAU,gBAAgB,GAAA,CAAM;AAAA,EAAA,CAC1F,CAAC;AACJ;"}
1
+ {"version":3,"file":"examples.es.js","sources":["../src/utils/mapEachMetadataItem.ts","../src/examples/components/IconButton.vue","../src/examples/TestFormTemplate.vue","../src/examples/TestForm.vue","../src/examples/__tests__/TestFormTemplate.testcases.ts"],"sourcesContent":["import type { FieldMetadata } from '@/types/FieldMetadata';\n\n/**\n * Recursively walks a `FieldMetadata` tree (visiting `children` and `choice`) and applies\n * `callbackFunc` to every node, returning the transformed tree.\n *\n * The callback receives a shallow clone of each node, so mutations inside the callback do not\n * affect the original metadata. `children` and `choice` on the returned node are replaced with\n * the recursively-mapped results after the callback runs.\n */\nexport function mapEachMetadataItem<\n ExtendedFieldTypes extends string = string,\n ExtendedProperties extends object = object,\n>(\n metadata: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>,\n callbackFunc: (item: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>) => FieldMetadata<ExtendedFieldTypes, ExtendedProperties>,\n): FieldMetadata<ExtendedFieldTypes, ExtendedProperties> {\n if (!metadata || !callbackFunc)\n return metadata;\n\n metadata = callbackFunc?.({ ...metadata });\n metadata.children = metadata?.children?.map(x => mapEachMetadataItem(x, callbackFunc));\n metadata.choice = metadata?.choice?.map(x => mapEachMetadataItem(x, callbackFunc));\n return metadata;\n}\n","<script lang=\"ts\" setup>\ninterface Props {\n icon: 'plus' | 'minus'\n color?: 'blue' | 'red'\n}\ninterface Emits {\n (e: 'click'): void\n}\nconst {\n icon,\n color = 'blue',\n} = defineProps<Props>();\ndefineEmits<Emits>();\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"cursor-pointer inline-flex items-center justify-center rounded-full size-5 text-white-800 cursor-pointer\"\n :class=\"{\n 'bg-blue-200 hover:bg-blue-300': color === 'blue',\n 'bg-red-200 hover:bg-red-300': color === 'red',\n }\"\n @click=\"$emit('click')\"\n >\n <svg v-if=\"icon === 'plus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" />\n </svg>\n <svg v-if=\"icon === 'minus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14\" />\n </svg>\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport type { GetDynamicFormSettingsType } from '@/types/GetDynamicFormSettingsType';\nimport type { GetMetadataType } from '@/types/GetMetadataType';\nimport DynamicFormTemplate from '@/components/DynamicFormTemplate.vue';\nimport { defineMetadata } from '@/core/defineMetadata';\nimport IconButton from './components/IconButton.vue';\n\nexport type Metadata = GetMetadataType<typeof metadata>;\n\nexport type DynamicFormSettings = GetDynamicFormSettingsType<typeof metadata>;\n\nconst metadata = defineMetadata<\n {\n text: string\n textBoundByVModel: string\n select: string\n selectBoundByVModel: string\n checkbox: boolean\n checkboxBoundByVModel: boolean\n heading: never\n group: never\n },\n {\n description?: string\n options?: { key: string, value: string }[]\n fullWidth?: boolean\n disabled?: boolean\n hidden?: boolean\n },\n /**\n * Free to decide what attributes you want to pass internally between your templates.\n * You can add any attribute to a <slot /> and then it will be accessible in props.slotProps.\n */\n {\n hideLabel?: boolean\n /** Example on how to keep track of the levels */\n level?: number\n /** Helps identifying that we're below a choice field, so if we're rendering an array we can adjust our layout */\n belowChoiceField?: boolean\n hidden?: boolean\n },\n {\n showOptionalInsteadOfRequired?: boolean\n }\n>();\n</script>\n\n<template>\n <DynamicFormTemplate :metadata-configuration=\"metadata\">\n <template #heading=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, canAddItems, addItem, canRemoveItems, removeItem, slotProps }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"mt-4\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <h3 v-if=\"label\" class=\"flex text-xl font-bold gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </h3>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n </div>\n </template>\n\n <template #heading-array>\n <!-- Don't show any extra elements for the heading -->\n <slot />\n </template>\n\n <template #default-choice=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center\" :class=\"{ 'text-gray-500': disabled }\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" :below-choice-field=\"true\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem, settings: { showOptionalInsteadOfRequired } }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label :for=\"`${fieldMetadata.path}[0]`\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\" class=\"flex gap-2 items-center\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </label>\n <slot :hide-label=\"true\" />\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canRemoveItems, removeItem, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label v-if=\"!slotProps?.hideLabel\" :for=\"fieldMetadata.path\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\" class=\"flex gap-1 items-center\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n </label>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex flex-col grow\">\n <slot />\n </div>\n <IconButton :class=\"{ invisible: !canRemoveItems }\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #group-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <template v-if=\"fieldMetadata.hidden\" />\n <!-- In case we're below a choice field, the first array item is not automatically added, so show a label with buttons -->\n <div v-else-if=\"slotProps?.belowChoiceField\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <!-- In case we show an input directly, show a label and buttons -->\n <slot v-else />\n </template>\n\n <template #group=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, canRemoveItems, addItem, removeItem, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <!-- In case of a grouped field we render the field differently -->\n <div v-if=\"!fieldMetadata.hidden\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span v-if=\"!slotProps?.hideLabel\" class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" color=\"red\" @click=\"removeItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #select-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #selectBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #checkbox-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :checked=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange(($event.target as HTMLInputElement).checked)\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #checkboxBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #textBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #default-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @input=\"handleChange\"\n @blur=\"handleBlur\"\n >\n </template>\n </DynamicFormTemplate>\n</template>\n","<script setup lang=\"ts\">\nimport type { GenericObject } from 'vee-validate';\n\nimport type { DynamicFormSettings, Metadata } from './TestFormTemplate.vue';\nimport { computed, ref } from 'vue';\nimport { checkTreeHasValue } from '@/utils/checkTreeHasValue';\nimport { mapEachMetadataItem } from '@/utils/mapEachMetadataItem';\nimport DynamicForm from '../components/DynamicForm.vue';\nimport { useDynamicForm } from '../core/useDynamicForm';\nimport TestFormTemplate from './TestFormTemplate.vue';\n\nexport interface Props {\n metadata: Metadata[]\n settings?: DynamicFormSettings\n showDebugState?: boolean\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n}\n\nconst { metadata, settings: _settings, initialEdit = true, hideFieldsWithoutValue = false, showDebugState = false, initialValues } = defineProps<Props>();\n\nconst { values, handleSubmit, errors, meta } = useDynamicForm({\n initialValues,\n});\nconst manualValues = ref();\nconst editMode = ref(initialEdit);\nconst isSubmitted = ref(false);\n\n// Add edit mode functionality to the form. In case we're not in edit mode, disable all items.\nconst metadataWithEdit = computed(() => metadata?.map(x => mapEachMetadataItem(x, (item) => {\n item.computedProps = item.computedProps ?? [];\n\n // Disable all fields when not in edit mode\n item.computedProps.push((thisField) => {\n if (!editMode.value)\n thisField.disabled = true;\n });\n\n if (hideFieldsWithoutValue) {\n // In view mode, hide fields that have no value\n item.computedProps.push((thisField, fieldValue) => {\n if (!editMode.value && !checkTreeHasValue(fieldValue.value))\n thisField.hidden = true;\n });\n\n // In view mode, hide a parent field when all of its children are hidden\n item.computedProps.push((thisField, _fieldValue, childFields) => {\n if (!editMode.value && childFields.value.length > 0 && childFields.value.every(c => c.hidden))\n thisField.hidden = true;\n });\n }\n\n return item;\n})));\n\nconst settings = computed(() => ({\n analytics: true,\n messages: {\n required: '{field} is required',\n minOccurs: 'At least {min} items required',\n choiceMinOccurs: 'The following fields need to occur at least {min} time(s): {field}',\n minLength: 'The minimum length of {field} is {length}',\n maxLength: 'The maximum length of {field} is {length}',\n length: '{field} must be exactly {length} characters',\n pattern: '{field} does not match the required pattern',\n minInclusive: '{field} must be at least {min}',\n maxInclusive: '{field} must be at most {max}',\n minExclusive: '{field} must be greater than {min}',\n maxExclusive: '{field} must be less than {max}',\n enumeration: '{field} must be one of the allowed values',\n whiteSpace: '{field} contains invalid whitespace (mode: {mode})',\n fractionDigits: '{field} may have at most {digits} decimal place(s)',\n totalDigits: '{field} may have at most {digits} significant digit(s)',\n },\n ...(_settings ?? {}),\n}));\n\nfunction submit(e?: Event) {\n handleSubmit(\n (_values) => {\n isSubmitted.value = true;\n editMode.value = false;\n },\n ({ errors: _errors }) => {\n isSubmitted.value = false;\n },\n )(e);\n};\n</script>\n\n<template>\n <form @submit.prevent=\"submit\">\n <div class=\"flex justify-end gap-2\">\n <button v-if=\"!editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\" @click=\"editMode = true\">\n Edit\n </button>\n <button v-if=\"editMode\" type=\"submit\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\">\n Submit\n </button>\n <button v-if=\"editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-gray-200 text-black px-4 py-2 rounded\" data-testid=\"cancel\" @click=\"editMode = false\">\n Cancel\n </button>\n </div>\n <div v-if=\"Object.values(errors).length\" data-testid=\"errors\" class=\"col-12 text-red-600\">\n Errors:\n <ul>\n <li v-for=\"(error, key) in errors\" :key=\"key\">\n <span v-html=\"error\" />\n </li>\n </ul>\n </div>\n <DynamicForm\n :template=\"TestFormTemplate\"\n :metadata=\"metadataWithEdit\"\n :settings\n @update:model-value=\"manualValues = $event\"\n />\n <span v-if=\"isSubmitted\" data-testid=\"isSubmitted\" />\n <pre v-if=\"showDebugState\" class=\"bg-gray-100 p-4 rounded-lg text-sm overflow-auto\">\nIsDirty: {{ meta.dirty }}\nPending: {{ meta.pending }}\nTouched: {{ meta.touched }}\nValid: {{ meta.valid }}\nSubmitted: {{ isSubmitted }}\n\n// form values:\n{{ JSON.stringify(values, null, 2) }}\n </pre>\n </form>\n</template>\n","import type { GenericObject } from 'vee-validate';\nimport type { DynamicFormSettings, Metadata } from '@/examples/TestFormTemplate.vue';\n\nimport { defineComponent, h, markRaw } from 'vue';\nimport TestForm from '@/examples/TestForm.vue';\n\nexport const defaultTestCase = createTestCase([{\n name: 'text',\n type: 'text',\n fieldOptions: { label: 'Text Input' },\n path: 'with.custom.structure',\n restriction: { maxLength: 10 },\n}]);\n\nexport const arrayTestCase = createTestCase([{\n fieldOptions: { label: 'Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Optional field (max 3)' }, minOccurs: 0, maxOccurs: 3 },\n { fieldOptions: { label: 'Required field (max 3)' }, maxOccurs: 3 },\n { fieldOptions: { label: '2 Fields required' }, minOccurs: 2, maxOccurs: 4 },\n { fieldOptions: { label: 'Section (2 sections required)' }, type: 'heading', minOccurs: 2, maxOccurs: 4, fullWidth: true, children: [\n { fieldOptions: { label: 'Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' }, type: 'select', options: [\n { key: 'option1', value: 'Option 1' },\n { key: 'option2', value: 'Option 2' },\n { key: 'option3', value: 'Option 3' },\n ] },\n { fieldOptions: { label: 'Nested field 3' }, type: 'checkbox' },\n ] },\n ],\n}]);\n\nexport const groupTestCase = createTestCase([{\n fieldOptions: { label: 'Grouped Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, description: `The group is optional, therefore the children will only be required once 1 value is filled in.\n \nYou can test it by filling in one of the fields.`, children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n ],\n}, {\n fieldOptions: { label: 'Grouped Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n ],\n}]);\n\nexport const choiceTestCase = createTestCase([\n {\n fieldOptions: { label: 'Choice Fields (minOccurs 1, maxOccurs 1)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Simple Choice Field' }, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' } },\n { fieldOptions: { label: 'Nested Field 2' } },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Grouped Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Nested Field 2' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Array Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, maxOccurs: 3 },\n { fieldOptions: { label: 'Nested Field 2' }, maxOccurs: 3 },\n ] },\n ],\n },\n]);\n\nexport const childFieldsTestCase = createTestCase([\n {\n fieldOptions: { label: 'Personal Info' },\n type: 'heading',\n name: 'person',\n description: 'Only showing the fields that have a value. Click edit to change.',\n fullWidth: true,\n children: [\n { name: 'firstName', fieldOptions: { label: 'First Name' } },\n { name: 'lastName', fieldOptions: { label: 'Last Name' } },\n { name: 'email', fieldOptions: { label: 'Email' } },\n ],\n },\n {\n fieldOptions: { label: 'Address' },\n type: 'heading',\n name: 'address',\n fullWidth: true,\n children: [\n { name: 'street', fieldOptions: { label: 'Street' }, minOccurs: 0 },\n { name: 'city', fieldOptions: { label: 'City' }, minOccurs: 0 },\n { name: 'country', fieldOptions: { label: 'Country' }, minOccurs: 0 },\n ],\n },\n], undefined, {\n initialEdit: false,\n hideFieldsWithoutValue: true,\n initialValues: {\n person: {\n firstName: 'Jack',\n lastName: 'Smit',\n },\n },\n});\n\nexport const individualTestCase = createTestCase(\n [{\n name: 'items',\n type: 'text',\n fieldOptions: { label: 'Items' },\n maxOccurs: 3,\n attributes: [{ name: 'lang', type: 'text', minOccurs: 0 }],\n }],\n {\n // validateOnValueUpdate: false,\n // validateOnValueUpdateAfterSubmit: false,\n // validateWhenInError: true,\n // validateOnBlur: true,\n },\n);\n\nexport function createTestCase(\n metadata: Metadata[],\n settings?: DynamicFormSettings,\n testCaseConfig: {\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n } = {},\n) {\n return markRaw(defineComponent({\n render: () => h(TestForm, { ...testCaseConfig, metadata, settings, showDebugState: true }),\n }));\n}\n"],"names":["mapEachMetadataItem","metadata","callbackFunc","x","_createElementBlock","color","$emit","icon","_openBlock","_hoisted_1","_cache","_createElementVNode","_hoisted_2","defineMetadata","_createBlock","DynamicFormTemplate","_unref","fieldMetadata","errorMessage","label","disabled","canAddItems","addItem","canRemoveItems","removeItem","slotProps","_normalizeClass","_createTextVNode","_toDisplayString","IconButton","_hoisted_3","_renderSlot","_ctx","_withCtx","required","showOptionalInsteadOfRequired","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_createVNode","_hoisted_19","_hoisted_20","_Fragment","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","value","handleBlur","handleChange","optionKey","optionValue","_hoisted_32","$event","_hoisted_34","_vModelSelect","_vModelCheckbox","_vModelText","values","handleSubmit","errors","meta","useDynamicForm","__props","manualValues","ref","editMode","isSubmitted","metadataWithEdit","computed","item","thisField","fieldValue","checkTreeHasValue","_fieldValue","childFields","c","settings","submit","e","_values","_errors","_renderList","error","key","DynamicForm","TestFormTemplate","showDebugState","defaultTestCase","createTestCase","arrayTestCase","groupTestCase","choiceTestCase","childFieldsTestCase","individualTestCase","testCaseConfig","markRaw","defineComponent","h","TestForm"],"mappings":"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"}
@@ -2,8 +2,11 @@ import type { DefineComponent } from 'vue';
2
2
  import type { DynamicFormSettings } from '../types/DynamicFormSettings';
3
3
  import type { FieldMetadata } from '../types/FieldMetadata';
4
4
  export interface DynamicFormProps<Metadata extends FieldMetadata> {
5
+ /** One or more field descriptors. Pass an array for multiple top-level fields. */
5
6
  metadata: Metadata | Metadata[];
7
+ /** A `DynamicFormTemplate`-based component that exposes the named slots used for rendering. */
6
8
  template: DefineComponent<object, object, any>;
9
+ /** Overrides for the library defaults; partial — missing keys fall back to built-in defaults. */
7
10
  settings?: DynamicFormSettings;
8
11
  }
9
12
  declare const _default: <Metadata extends FieldMetadata>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
@@ -2,8 +2,11 @@ import type { DynamicFormItemProps } from '../types/DynamicFormItemProps';
2
2
  import type { FieldMetadata } from '../types/FieldMetadata';
3
3
  import type { InternalFieldMetadata } from '../types/InternalFieldMetadata';
4
4
  export interface Emit {
5
+ /** Emitted by leaf input fields whenever their value changes; payload is the new field value. */
5
6
  (e: 'update:modelValue', value: unknown): void;
7
+ /** Forwarded from vee-validate's `handleBlur`; lets parent array/choice fields trigger validation on blur. */
6
8
  (e: 'blur', event?: Event | undefined, shouldValidate?: boolean | undefined): void;
9
+ /** Emitted on mount and whenever the field's computed hash changes, so the parent keeps `childFields` in sync. */
7
10
  (e: 'update:computedField', field: InternalFieldMetadata<FieldMetadata>): void;
8
11
  }
9
12
  declare const _default: <InternalMetadata extends InternalFieldMetadata<FieldMetadata>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
@@ -2,7 +2,9 @@ import type { DynamicFormItemProps } from '../types/DynamicFormItemProps';
2
2
  import type { FieldMetadata } from '../types/FieldMetadata';
3
3
  import type { InternalFieldMetadata } from '../types/InternalFieldMetadata';
4
4
  export interface Emit {
5
+ /** Emitted whenever array values change (item added, removed, or updated); payload is the full array value. */
5
6
  (e: 'update:modelValue', value: unknown): void;
7
+ /** Bubbled up from child `DynamicFormItem` instances; carries the updated computed field metadata. */
6
8
  (e: 'update:computedField', field: InternalFieldMetadata<FieldMetadata>): void;
7
9
  }
8
10
  declare const _default: <InternalMetadata extends InternalFieldMetadata<FieldMetadata>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
@@ -2,7 +2,9 @@ import type { DynamicFormItemProps } from '../types/DynamicFormItemProps';
2
2
  import type { FieldMetadata } from '../types/FieldMetadata';
3
3
  import type { InternalFieldMetadata } from '../types/InternalFieldMetadata';
4
4
  export interface Emit {
5
+ /** Emitted whenever any child option's value changes; payload is the array of all child values in choice-option order. */
5
6
  (e: 'update:modelValue', value: unknown): void;
7
+ /** Bubbled up from child `DynamicFormItem` instances; carries the updated computed field metadata. */
6
8
  (e: 'update:computedField', field: InternalFieldMetadata<FieldMetadata>): void;
7
9
  }
8
10
  declare const _default: <InternalMetadata extends InternalFieldMetadata<FieldMetadata>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
@@ -1,5 +1,6 @@
1
1
  import type { FieldContext as _FieldContext } from 'vee-validate';
2
2
  import type { ComputedRef, MaybeRefOrGetter, Ref } from 'vue';
3
+ import type { DynamicFormSettings } from '../types/DynamicFormSettings';
3
4
  import type { ReadOnlyFieldType } from '../types/FieldMetadata';
4
5
  import type { MetadataConfiguration } from '../types/MetadataConfiguration';
5
6
  export interface FieldContext<TValue = unknown> extends _FieldContext<TValue> {
@@ -56,6 +57,10 @@ export interface Attributes<TMetadataConfiguration extends MetadataConfiguration
56
57
  * With these properties you can set values that can be read by components "living" further down the tree.
57
58
  */
58
59
  slotProps: TMetadataConfiguration['slotProperties'];
60
+ /**
61
+ * The form settings
62
+ */
63
+ settings: DynamicFormSettings<TMetadataConfiguration['extendedSettingsProperties']>;
59
64
  }
60
65
  export interface ItemAttributes<TMetadataConfiguration extends MetadataConfiguration, FieldType extends string = string> extends Attributes<TMetadataConfiguration> {
61
66
  /**
@@ -1,14 +1,15 @@
1
1
  /**
2
- * Helps you to create a metadata configuration with strongly-typed field definitions.
3
- * Field value types are directly inferred from the provided type interface.
2
+ * Creates a typed metadata configuration for use with `DynamicFormTemplate`.
4
3
  *
5
- * Simply pass an interface where keys are field names and values are the expected value types.
6
- * Use `never` for fields that don't hold values (like headings).
7
- * Note: you can't use the following reserved field names: 'input', 'children', 'choice', 'array'.
8
- *
9
- * Use the extended properties to add custom metadata to each field definition. *
10
- * @returns Typed configuration object for DynamicFormTemplate consumption
4
+ * The returned object is a pure type carrier — its runtime values are empty stubs.
5
+ * TypeScript uses it to infer slot names, `fieldContext.value` types, extended field properties,
6
+ * and the shape of `slotProps`. A `default` field type is always injected automatically.
11
7
  *
8
+ * @typeParam FieldValueTypes - Map of field type names to their `fieldContext.value` types.
9
+ * Use `never` for display-only types (headings, separators) that hold no value.
10
+ * @typeParam ExtendedFieldProperties - Extra properties merged into every `FieldMetadata` object.
11
+ * @typeParam SlotProperties - Shape of `slotProps` passed from parent slots to child slots.
12
+ * @typeParam ExtendedSettingsProperties - Extra properties merged into `Settings` object.
12
13
  * @example
13
14
  * const config = defineMetadata<
14
15
  * {
@@ -22,13 +23,23 @@
22
23
  * // This will add a label and options property to each field's metadata
23
24
  * label?: string;
24
25
  * options?: Array<{ key: string; value: string }>;
26
+ * },
27
+ * {
28
+ * // This will add allow you to pass hideLabel and depth through the slots
29
+ * hideLabel?: boolean;
30
+ * depth?: number;
31
+ * },
32
+ * {
33
+ * // This will add a showOptionalOrRequired property to the settings object
34
+ * showOptionalOrRequired?: 'optional' | 'required';
25
35
  * }
26
36
  * >();
27
37
  */
28
- export declare function defineMetadata<const FieldValueTypes extends Record<string, any>, ExtendedFieldProperties extends object = object, SlotProperties extends object = object>(): {
29
- fieldTypes: readonly ("default" | Exclude<keyof FieldValueTypes, "children" | "choice" | "input" | "array">)[];
38
+ export declare function defineMetadata<const FieldValueTypes extends Record<string, any>, ExtendedFieldProperties extends object = object, SlotProperties extends object = object, ExtendedSettingsProperties extends object = object>(): {
39
+ fieldTypes: readonly ("default" | keyof FieldValueTypes)[];
30
40
  extendedProperties: ExtendedFieldProperties;
31
41
  slotProperties: SlotProperties;
42
+ extendedSettingsProperties: ExtendedSettingsProperties;
32
43
  valueTypes: FieldValueTypes & {
33
44
  default: string;
34
45
  };
@@ -2,6 +2,7 @@ import type { PartialDeep } from 'type-fest';
2
2
  import type { FlattenAndSetPathsType, FormContext, GenericObject, Path, PathValue } from 'vee-validate';
3
3
  import type { MaybeRef, MaybeRefOrGetter, Ref } from 'vue';
4
4
  import { useValidatePartialForm } from '../core/useValidatePartialForm';
5
+ /** Options forwarded directly to vee-validate's `useForm()`. */
5
6
  export interface FormOptions<TValues extends GenericObject> {
6
7
  initialValues?: PartialDeep<TValues> | undefined | null;
7
8
  initialErrors?: FlattenAndSetPathsType<TValues, string | undefined>;
@@ -10,6 +11,13 @@ export interface FormOptions<TValues extends GenericObject> {
10
11
  keepValuesOnUnmount?: MaybeRef<boolean>;
11
12
  name?: string;
12
13
  }
14
+ /**
15
+ * Typed wrapper around vee-validate's `useForm()`. Adds:
16
+ * - `useFieldValue(path)` — path-aware field value accessor with full `TValues` type inference,
17
+ * avoiding the need to manually cast `PathValue`.
18
+ * - `validateSection(path)` — validates only the fields registered under the given path prefix,
19
+ * useful for multi-step wizard validation.
20
+ */
13
21
  export declare function useDynamicForm<TValues extends GenericObject = GenericObject>(opts?: FormOptions<TValues>): FormContext<TValues> & {
14
22
  useFieldValue: <TPath extends Path<TValues>>(path?: MaybeRefOrGetter<TPath>) => Ref<PathValue<TValues, TPath>>;
15
23
  validateSection: ReturnType<typeof useValidatePartialForm>['validateSection'];
@@ -1,6 +1,7 @@
1
1
  import type { MaybeRefOrGetter } from 'vue';
2
2
  /**
3
- * Extended useFieldArray, with the childrens values included.
3
+ * Wraps vee-validate's `useFieldArray`, adding a `values` computed shorthand for
4
+ * `fields.value.map(f => f.value)` so callers don't need to unwrap each keyed field object.
4
5
  */
5
6
  export declare function useFieldArrayExtended(arrayPath: MaybeRefOrGetter<string>): {
6
7
  remove(idx: number): void;
@@ -1,4 +1,12 @@
1
1
  import type { FormValidationResult, GenericObject } from 'vee-validate';
2
+ /**
3
+ * Provides `validateSection` for partial form validation (e.g. wizard steps).
4
+ *
5
+ * Must be called in the same component as `useDynamicForm()` or in a descendant.
6
+ * When called in the same component, it reads the form context from the current instance's
7
+ * own provides rather than via `inject`, because `inject` looks at the *parent's* provides
8
+ * and would miss a `useForm()` call made on the current instance.
9
+ */
2
10
  export declare function useValidatePartialForm(): {
3
11
  validateSection: (sectionPath: string) => Promise<FormValidationResult<GenericObject>>;
4
12
  };
@@ -1,4 +1,5 @@
1
1
  export { resolveMessage } from '../utils/resolveMessage';
2
+ /** XSD-derived rule names registered globally via vee-validate's `defineRule`. */
2
3
  export type ValidationRule = 'xsd_required' | 'xsd_minOccurs' | 'xsd_choiceMinOccurs' | 'xsd_minLength' | 'xsd_maxLength' | 'xsd_pattern' | 'xsd_minInclusive' | 'xsd_maxInclusive' | 'xsd_minExclusive' | 'xsd_maxExclusive' | 'xsd_enumeration' | 'xsd_length' | 'xsd_whiteSpace' | 'xsd_fractionDigits' | 'xsd_totalDigits';
3
4
  /**
4
5
  * Maps each rule to its semantic parameter name, enabling named placeholder
@@ -1,6 +1,5 @@
1
1
  import type { GenericObject } from 'vee-validate';
2
- import type { Metadata } from './TestFormTemplate.vue';
3
- import type { DynamicFormSettings } from '../types/DynamicFormSettings';
2
+ import type { DynamicFormSettings, Metadata } from './TestFormTemplate.vue';
4
3
  export interface Props {
5
4
  metadata: Metadata[];
6
5
  settings?: DynamicFormSettings;
@@ -1,5 +1,7 @@
1
+ import type { GetDynamicFormSettingsType } from '../types/GetDynamicFormSettingsType';
1
2
  import type { GetMetadataType } from '../types/GetMetadataType';
2
3
  export type Metadata = GetMetadataType<typeof metadata>;
4
+ export type DynamicFormSettings = GetDynamicFormSettingsType<typeof metadata>;
3
5
  declare const metadata: {
4
6
  fieldTypes: readonly ("default" | "checkbox" | "select" | "text" | "textBoundByVModel" | "selectBoundByVModel" | "checkboxBoundByVModel" | "heading" | "group")[];
5
7
  extendedProperties: {
@@ -20,6 +22,9 @@ declare const metadata: {
20
22
  belowChoiceField?: boolean;
21
23
  hidden?: boolean;
22
24
  };
25
+ extendedSettingsProperties: {
26
+ showOptionalInsteadOfRequired?: boolean;
27
+ };
23
28
  valueTypes: {
24
29
  text: string;
25
30
  textBoundByVModel: string;
@@ -1,6 +1,5 @@
1
1
  import type { GenericObject } from 'vee-validate';
2
- import type { Metadata } from '../../examples/TestFormTemplate.vue';
3
- import type { DynamicFormSettings } from '../../types/DynamicFormSettings';
2
+ import type { DynamicFormSettings, Metadata } from '../../examples/TestFormTemplate.vue';
4
3
  export declare const defaultTestCase: import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
5
4
  export declare const arrayTestCase: import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
6
5
  export declare const groupTestCase: import("vue").Raw<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
@@ -6,10 +6,10 @@ export { default as DynamicFormTemplate } from './components/DynamicFormTemplate
6
6
  export * from './core/defineMetadata';
7
7
  export * from './core/useDynamicForm';
8
8
  export * from './core/useValidatePartialForm';
9
- export * from './core/validation';
10
9
  export * from './types/DynamicFormItemProps';
11
10
  export * from './types/DynamicFormSettings';
12
11
  export * from './types/FieldMetadata';
12
+ export * from './types/GetDynamicFormSettingsType';
13
13
  export * from './types/GetMetadataType';
14
14
  export * from './types/MetadataConfiguration';
15
15
  export * from './types/RequireOnly';
@@ -3,11 +3,8 @@ import type { FieldMetadata } from '../types/FieldMetadata';
3
3
  import type { InternalFieldMetadata } from '../types/InternalFieldMetadata';
4
4
  export interface DynamicFormItemProps<InternalMetadata extends InternalFieldMetadata<FieldMetadata>> {
5
5
  template: DefineComponent<object, object, {
6
- input?: ((props: object) => any) | undefined;
7
- children?: ((props: object) => any) | undefined;
6
+ default?: ((props: object) => any) | undefined;
8
7
  attributes?: ((props: object) => any) | undefined;
9
- choice?: ((props: object) => any) | undefined;
10
- array?: ((props: object) => any) | undefined;
11
8
  }>;
12
9
  fieldMetadata: InternalMetadata;
13
10
  /**
@@ -1,6 +1,6 @@
1
1
  import type { ValidationMessage } from '../types/ValidationMessage';
2
2
  export declare const dynamicFormSettingsKey: unique symbol;
3
- export interface DynamicFormSettings {
3
+ export type DynamicFormSettings<ExtendedProperties extends object = object> = {
4
4
  /**
5
5
  * Enables diagnostic data output via concealed DOM elements for reactivity testing
6
6
  */
@@ -33,7 +33,7 @@ export interface DynamicFormSettings {
33
33
  /**
34
34
  * When true, validates fields on every value change when the field has an error.
35
35
  *
36
- * Defaults to false.
36
+ * Defaults to true (applied by DynamicForm).
37
37
  */
38
38
  validateWhenInError?: boolean;
39
39
  /**
@@ -86,4 +86,4 @@ export interface DynamicFormSettings {
86
86
  /** XSD: totalDigits. Available placeholders: `{field}`, `{0}` or `{digits}` (max total digits) */
87
87
  totalDigits?: ValidationMessage;
88
88
  };
89
- }
89
+ } & ExtendedProperties;
@@ -0,0 +1,3 @@
1
+ import type { DynamicFormSettings } from './DynamicFormSettings';
2
+ import type { MetadataConfiguration } from '../types/MetadataConfiguration';
3
+ export type GetDynamicFormSettingsType<T extends MetadataConfiguration> = DynamicFormSettings<T['extendedSettingsProperties']>;
@@ -2,5 +2,6 @@ export interface MetadataConfiguration {
2
2
  fieldTypes: readonly string[];
3
3
  extendedProperties: object;
4
4
  slotProperties: object;
5
+ extendedSettingsProperties: object;
5
6
  valueTypes: Record<string, any>;
6
7
  }
@@ -7,6 +7,7 @@ declare const _metadata: {
7
7
  visitOrder?: number;
8
8
  };
9
9
  slotProperties: object;
10
+ extendedSettingsProperties: object;
10
11
  valueTypes: {
11
12
  text: string;
12
13
  } & {